我有一张这样的table:
fk | value ======== A | 1 A | 2 B | 1 C | 1
我尝试创建一个fk列表,其中没有出现特定值,例如 2 .一种尝试是这样做:
2
SELECT fk FROM foo WHERE value <> 2;
但这还是会回来的 A, B, C ,因为 A 有两个条目,其中一个不是 2 . 我需要 B, C 相反。我怎样才能解决这个问题?
A, B, C
A
B, C
wfveoks01#
你可以找到你的 fk 用你的价值Map然后消除它:
fk
SELECT f.fk FROM foo f WHERE f.fk NOT IN (SELECT f1.fk FROM foo f1 WHERE f1.value = 2)
im9ewurl2#
或者使用groupby与having not和条件和结合使用查询
SELECT foo.fk FROM foo GROUP BY foo.fk HAVING NOT SUM(foo.value = 2)
请参见演示https://www.db-fiddle.com/f/kyp2ykqdehtkm1e6nsdken/0
pnwntuvh3#
使用 not exists :
not exists
select f.* from foo f where not exists (select 1 from foo f1 where f1.fk = f.fk and f1.value = 2);
3条答案
按热度按时间wfveoks01#
你可以找到你的
fk
用你的价值Map然后消除它:im9ewurl2#
或者使用groupby与having not和条件和结合使用
查询
请参见演示https://www.db-fiddle.com/f/kyp2ykqdehtkm1e6nsdken/0
pnwntuvh3#
使用
not exists
: