我有一张桌子,每人每件衣服有一条记录
所以
peter, jumper,blue
peter,trousers,green
sue,dress,green
peter,jumper,red
gordon,jumper,green
我想写一个查询来选择所有绿色跳线的人,但前提是他们没有其他颜色的跳线
所以在上面的情况下,它只会选择戈登而不是贪婪的老彼得
可能吗?
答案 0 :(得分:4)
这应该可行,但未经测试。语法也可能有些偏差,因为我脑子里仍然有Firebird 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')
答案 1 :(得分:1)
我必须去参加一个会议,但CASE声明可能会帮助你。
答案 2 :(得分:1)
SELECT *
FROM MyTable t1
WHERE Color = 'green'
AND NOT EXISTS (
SELECT 1
FROM MyTable
WHERE Color <> 'green'
AND PersonName = t1.PersonName
)