我有一个表,每个人,每一件衣物的一个记录的MySQL选择记录如果其他记录不匹配
所以
peter, jumper,blue
peter,trousers,green
sue,dress,green
peter,jumper,red
gordon,jumper,green
我想编写一个查询来选择所有的人绿色的跳投,但只有当他们没有其他颜色的跳线
因此,在上述情况下,它只会选择登不贪老彼得
这可能吗?
我有一个表,每个人,每一件衣物的一个记录的MySQL选择记录如果其他记录不匹配
所以
peter, jumper,blue
peter,trousers,green
sue,dress,green
peter,jumper,red
gordon,jumper,green
我想编写一个查询来选择所有的人绿色的跳投,但只有当他们没有其他颜色的跳线
因此,在上述情况下,它只会选择登不贪老彼得
这可能吗?
这应该有效,但它没有经过测试。语法也可能有点过,因为我还有火鸟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')
我要运行开了一个会议,但是CASE语句可能会帮助你这里。
SELECT *
FROM MyTable t1
WHERE Color = 'green'
AND NOT EXISTS (
SELECT 1
FROM MyTable
WHERE Color <> 'green'
AND PersonName = t1.PersonName
)
这看起来不错,但似乎已经杀了我的MySQL服务器 – zzapper 2009-05-01 15:13:57
没错这做到了。我有很多记录要查询。为了减少执行时间,我必须确保主选择尽可能紧凑,以便子选择的执行时间较少 – zzapper 2009-05-01 16:14:43