创建未显示值的所有行的列表

问题描述 投票:0回答:3

我有一个像这样的表(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代替。

我怎么解决这个问题?

mysql sql
3个回答
4
投票

或者将GROUP BY与HAVING NOT和条件SUM结合使用

询问

SELECT 
 foo.fk
FROM
 foo
GROUP BY
 foo.fk
HAVING 
 NOT SUM(foo.value = 2)

看演示https://www.db-fiddle.com/f/kyP2ykqDEHTkM1E6NsdkEn/0


3
投票

使用not exists

select f.*
from foo f
where not exists (select 1 from foo f1 where f1.fk = f.fk and f1.value = 2);

2
投票

您可以找到与您的值映射的fk然后消除它:

SELECT f.fk
FROM foo f
WHERE f.fk NOT IN (SELECT f1.fk FROM foo f1 WHERE f1.value = 2)
© www.soinside.com 2019 - 2024. All rights reserved.