2009-05-01 137 views
0

我有一個表,每個人,每一件衣物的一個記錄的MySQL選擇記錄如果其他記錄不匹配

所以

peter, jumper,blue 
peter,trousers,green 
sue,dress,green 
peter,jumper,red 
gordon,jumper,green 

我想編寫一個查詢來選擇所有的人綠色的跳投,但只有當他們沒有其他顏色的跳線

因此,在上述情況下,它只會選擇登不貪老彼得

這可能嗎?

回答

4

這應該有效,但它沒有經過測試。語法也可能有點過,因爲我還有火鳥SQL中我的頭,但你應該得到的總體思路:

SELECT * 
FROM myTable AS t1 
WHERE t1.clothing = 'jumper' AND t1.color = 'green' 
AND NOT EXISTS(SELECT * 
       FROM myTable AS t2 
       WHERE t2.person = t1.person AND t2.clothing = 'jumper' 
       AND t2.color <> 'green') 
+0

這看起來不錯,但似乎已經殺了我的MySQL服務器 – zzapper 2009-05-01 15:13:57

+0

沒錯這做到了。我有很多記錄要查詢。爲了減少執行時間,我必須確保主選擇儘可能緊湊,以便子選擇的執行時間較少 – zzapper 2009-05-01 16:14:43

1
SELECT * 
FROM MyTable t1 
WHERE Color = 'green' 
AND NOT EXISTS (
    SELECT 1 
    FROM MyTable 
    WHERE Color <> 'green' 
    AND PersonName = t1.PersonName 
) 
相關問題