我试图在SO.上找到这个
,我有一张桌子
id | col2 | col3
---- ---- ----
5 smith (null)
5 smith 100
12 Jackson 356
12 Jackson 400
8 Johnson (null)
9 bob 1200
在这个场景中,我只想要同一个id只有一个非null的集合中的行。换句话说,我不要史密斯,我不要约翰逊。我只想要杰克逊和鲍勃。
我试过了,
select * from table
where is not null a
nd not exists (select * from table where is null)
我不能让它工作。
您的语句和期望的结果不完全匹配,但这将为您提供第3列中没有NULL值的每个ID:
SELECT * FROM table
WHERE id NOT IN
(SELECT ID FROM table WHERE col3 IS NULL)
如果您只想要一个非null的记录(您声明了这一点,但您的预期结果不匹配,请使用
SELECT * FROM table
WHERE id NOT IN
(SELECT ID
FROM table
WHERE col3 IS NOT NULL
GROUP BY ID
HAVING COUNT(id) = 1
)
您可以使用NOT EXISTS
,但包括一个WHERE来引用每个id:
select *
from yourtable t
where col3 is not null
and not exists (select id
from yourtable d
where d.col3 is null
and t.id = d.id);
请参阅演示