【问题标题】:SQL query to ask for one value onlySQL 查询只要求一个值
【发布时间】:2017-04-19 07:48:21
【问题描述】:

给出的表格如下:

MAKLER (MaklerID, Name, registriertSeit)
IMMOBILIE(ImmoID, Typ, qm, AnzahlZimmer, Baujahr, Energiewert, Preis,
angebotenVon, Provision, liegtIn)

“angebotenVon”是“MaklerID”的外键

我正在尝试编写一个查询,检查“Makler”是否销售类型为“Haus”的imbolie,而不是其他类型的“Immobilien”。如果 Makler 出售“Haus”和“Wohnungen”类型的不动产,我不想选择它们。

到目前为止,我的解决方案如下所示:

SELECT makler.*
FROM makler JOIN
     immobilie
     ON immobilie.angebotenVon = makler.MaklerID
WHERE immobilie.Typ = "Haus" AND immobilie.Typ != '%'

因此,如果“Haus”在固定不动的桌子内,并且“Makler”不出售任何其他东西,则显示完整的 makler 桌子。但我对这个解决方案非常不确定。

【问题讨论】:

  • 我猜你正在使用过滤查询,试试 immobilie.Typ LIKE "%Haus%" 并删除 immobilie.Typ != '%' 因为它是多余的
  • 但如果他们有“Haus”类型的“Immobile”和任何其他类型,它会显示“Makler”。但我需要所有只出售“Haus”类型不动的“Makler”。我希望我能解释一下我的意思。
  • 所以您的意思是“Makler”是您的主要数据,您只想过滤“Haus”而不是“Immobilien”的数据?
  • "Haus" 是 immobilie.type 中的一个可能值。如果 Makler 出售固定类型“Haus”,我想选择他。如果他有“豪斯”类型或者其他类型,我不想选择他。我更新了我的问题。
  • 尝试使用 immobilie.Typ = '%Haus' 将你的两个 where 子句合并到这个子句中。我假设你所有的数据类型都是字符串。

标签: mysql sql


【解决方案1】:

根据你的描述,你似乎想要not exists

SELECT m.*
FROM makler m
WHERE NOT EXISTS (SELECT 1
                  FROM immobilie i
                  WHERE i.angebotenVon = m.MaklerID AND
                        i.Typ <> 'Haus'
                 );

如果要保证“Haus”在表中(immobilie 可能没有匹配记录),则使用exists

SELECT m.*
FROM makler m
WHERE NOT EXISTS (SELECT 1
                  FROM immobilie i
                  WHERE i.angebotenVon = m.MaklerID AND
                        i.Typ <> 'Haus'
                 ) AND
      EXISTS (SELECT 1
              FROM immobilie i
              WHERE i.angebotenVon = m.MaklerID AND
                    i.Typ = 'Haus'
             );

【讨论】:

    【解决方案2】:

    您可以在多字段上使用连接,例如 reference from. 或简单地将查询更改为

    SELECT makler.* 
    FROM makler 
    JOIN immobilie ON immobilie.angebotenVon = makler.MaklerID 
          AND immobilie.Typ = "Haus" 
    

    【讨论】:

    • 更新您的问题以提供正确的描述和表格引用或说表格结构。
    猜你喜欢
    • 2013-03-26
    • 2022-11-18
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2020-06-28
    • 2019-07-15
    相关资源
    最近更新 更多