0

我试图在 SO 上找到这个。

我有一张桌子,

id   | col2 | col3
----   ----   ----
5     smith   (null)
5     smith  100
12    Jackson 356
12    Jackson 400
8     Johnson (null)
9     bob     1200

在这种情况下,我只想要一组中相同 id 只有一个非空的行。换句话说,我不要史密斯,我不要约翰逊。我只想要杰克逊和鲍勃。

我努力了,

select * from table 
where is not null a
nd not exists (select * from table where is null)

我无法让它工作。

4

2 回答 2

2

您的陈述和期望的结果并不完全匹配,但这会给您在第 3 列中没有 NULL 值的每个 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
)
于 2013-08-12T18:09:05.520 回答
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);

演示

于 2013-08-12T18:10:30.703 回答