如何检查所有行是有价值的..或不

时间:2015-02-21 11:53:04

标签: mysql sql sql-server sql-server-2008

下面是我的表格行结构

select  c1 from table where  c7 is not null

我需要c1值,如果c7,如果任何一行有空值,它不应该 我可以知道我能做到这一点.. 现在我正在获取具有值的列,但是如果有一次具有空值,则该条目不应该出现。

c1  c2  c3   c4  c5     c6   c7
31  1   1   BOQ NULL    1   Item5
31  2   1   BOQ NULL    2   Item5
31  3   2   BOQ NULL    3   Itmem7
31  4   3   BOQ NULL    4   Item9
31  5   4   BOQ NULL    5   Item5
31  6   5   BOQ NULL    6   Item5
31  7   6   BOQ NULL    7   NULL
31  8   7   BOQ NULL    8   NULL
31  9   8   BOQ NULL    9   NULL
31  10  9   BOQ NULL    10  NULL
32  1   1   BOQ NULL    1   NULL
32  2   2   BOQ NULL    2   NULL
33  1   0   BOQ NULL    1   NULL
33  2   1   BOQ NULL    3   NULL

2 个答案:

答案 0 :(得分:2)

试试这个:

select c1
from table
group by c1
having sum(c7 is null) = 0

这将返回没有c7值为null的c1的所有值。

对于更常用的(所有数据库)解决方案,请使用:

having sum(case when c7 is null then 1 end) = 0

或者

having count(c7) = count(*)

答案 1 :(得分:1)

NOT EXISTS版本:

select c1
from tablename t1
where not exists (select 1 from tablename t2
                  where t1.c1 = t2.c1 and t2.c7 is not null)

也许我误解了OP。上面的答案返回c1值只有NULL的c1值。

如果问题是为c7找到没有NULL的c1值,请将子选择IS NOT NULL更改为IS NULL

如果c1值即使多次出现也只返回一次,请SELECT DISTINCT