2016-12-05 52 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' 
      );