2011-07-27 60 views
1

如果我有一個屬性列表owner,wallColor和roofColor(假設一個所有者可以擁有多個房子,但房屋只能擁有一個所有者),我該如何選擇所有誰只有房屋具有相同的牆壁和屋頂顏色?其他列相同的SQL select id

所以,如果我有

owner wallColor roofColor 
Bob  Red  Green 
Bob  Blue  Blue 
Greg Yellow  Yellow 
Greg Black  Black 

它應該只返回格雷格,因爲乙有紅色的牆壁和屋頂綠化的房子。

回答

2
SELECT DISTINCT t1.owner 
FROM tablename t1 
WHERE t1.owner NOT IN 
(
    SELECT DISTINCT t2.owner FROM tablename t2 
    WHERE t2.wallColor != t2.roofColor 
) 
+0

是的,這就是我得到的。 –

+0

那兩個選擇,而不是3? – Jacob

+0

這整個事情實際上是從查詢中選擇,我想我應該指出。 –

0
SELECT DISTINCT owner FROM table WHERE wallColor=roofColor AND 
owner NOT IN (SELECT DISTINCT owner FROM table WHERE wallColor<>roofColor) 

這將是我的方法,但它可能需要一些調整。

+0

Bob有一個房子裏wallcolor = roofcolor) – Jacob

+0

你會選擇鮑勃,因爲他的房子,有不同顏色的失敗。 – BonyT

+0

對不起 - 修改後,重新閱讀問題 –

2
SELECT DISTINCT owner 
FROM ytable 
WHERE owner NOT IN 
(
    SELECT owner 
    FROM ytable 
    WHERE wallColor <> roofColor 
) 
0

使用exists操作者:

select * 
from table t 
where not exists(
    select 1 
    from table t1 
    where t1.owner = t.owner and t1.wallColor <> t1.roofColor 
) 
+1

不必要的相關查詢 – BonyT

+0

@BonyT,只是另一種解決方案... –

0

SELECT DISTINCT OWNER FROM ... WHERE wallcolor = roofcolor 除非 SELECT [DISTINCT] OWNER FROM ... WHERE wallcolor <> roofcolor;

:-)

相關問題