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

在SQL中,如何不从具有null和NOTNULL的集合中选择行?,sql,null,Sql,Null,我试着穿上这件衣服 我有一张桌子 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

我试着穿上这件衣服

我有一张桌子

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列中没有空值的每个ID:

SELECT * FROM table
WHERE id NOT IN
(SELECT ID FROM table WHERE col3 IS NULL)
如果您希望记录只有一个非空值(您声明了该值,但预期结果不匹配),请使用

SELECT * FROM table
WHERE id NOT IN
(SELECT ID 
 FROM table 
 WHERE col3 IS NOT NULL 
 GROUP BY ID 
 HAVING COUNT(id) = 1
)

您的语句和期望的结果不完全匹配,但这将为您提供第3列中没有空值的每个ID:

SELECT * FROM table
WHERE id NOT IN
(SELECT ID FROM table WHERE col3 IS NULL)
如果您希望记录只有一个非空值(您声明了该值,但预期结果不匹配),请使用

SELECT * FROM table
WHERE id NOT IN
(SELECT ID 
 FROM table 
 WHERE col3 IS NOT NULL 
 GROUP BY ID 
 HAVING COUNT(id) = 1
)

您可以使用
不存在
,但包括引用每个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);

请参见您可以使用
不存在
,但包括引用每个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);

请参见

如果smith只有一个非空行,为什么不想要它?如果它有两个非空行,为什么想要Jackson?@Yang因为我不需要那组记录。我需要一组没有空值的记录。@DStanley因为那是我需要的集类型。我需要一组值。没有空值或只有一个非空值?它们是不同的。为什么如果smith只有一个非空行,你不想要它吗?如果它有两个非空行,你为什么想要Jackson?@Yang,因为我不需要那组记录。我需要一组没有空的记录。@DStanley,因为那是我需要的集的类型。我需要一组值。没有空行或只有一个非空行?它们是不同的。