如何在SQL中不从具有null和非null的集合中选择行

  • 本文关键字:null 和非 集合 选择 SQL sql null
  • 更新时间 :
  • 英文 :


我试图在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);

请参阅演示

最新更新