2016-12-05 55 views
0

给出的表格是这些:SQL查询来问一个价值仅

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

“angebotenVon”是外键“MaklerID”

我想编写一个查询,我检查一个“Makler”销售一种类型为“Haus”的冒牌货,而不是其他类型的“Immobilien”。如果Makler出售“Haus”和“Wohnungen”类型的固定器,我不想选择它们。

我的解决方案,远远看上去像这样:

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

所以,如果“豪斯”是表immobilie内部,“Makler”不卖别的,完整makler表所示得到。但我很不确定这个解决方案。

+0

我想你正在使用一个过滤器查询,试试immobilie.Typ LIKE“%Haus%”并删除immobilie.Typ!='%',因为它是多余的 – GNMercado

+0

但它会告诉我“Makler”如果他们有“Immobile “的类型”豪斯“和任何其他。但我需要所有只销售“Haus”类型的“Makler”。我希望我能解释我的意思。 –

+0

所以你的意思是“Makler”是你的主要数据,你想过滤“Haus”的数据而不是“Immobilien”? – GNMercado

回答

0

你可以用参加多场,如采取reference from.或简单的查询更改为

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

更新您的问题以提供正确的描述和表格引用或者说表格结构。 – Smit

0

从你的描述,你似乎想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' 
      );