在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,因为那是我需要的集的类型。我需要一组值。没有空行或只有一个非空行?它们是不同的。