2009-05-01 136 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 
) 
相关问题