我有一个像这样的表(foo):
fk | value
========
A | 1
A | 2
B | 1
C | 1
我尝试创建一个没有出现特定值的所有fk的列表,例如价值2
。
一次尝试就是这样做:
SELECT fk
FROM foo
WHERE value <> 2;
但这仍然会返回A, B, C
,因为A
有两个条目,其中一个不是2
。我需要B, C
代替。
我怎么解决这个问题?
或者将GROUP BY与HAVING NOT和条件SUM结合使用
询问
SELECT
foo.fk
FROM
foo
GROUP BY
foo.fk
HAVING
NOT SUM(foo.value = 2)
使用not exists
:
select f.*
from foo f
where not exists (select 1 from foo f1 where f1.fk = f.fk and f1.value = 2);
您可以找到与您的值映射的fk
然后消除它:
SELECT f.fk
FROM foo f
WHERE f.fk NOT IN (SELECT f1.fk FROM foo f1 WHERE f1.value = 2)