Mysql 如何检查所有行是否有值
下面是我的表格行结构Mysql 如何检查所有行是否有值,mysql,sql,sql-server,sql-server-2008,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
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
试试这个:
select c1
from table
group by c1
having sum(c7 is null) = 0
这将返回c1的所有值,其中没有为null的c7值
要获得更通用的(所有数据库)解决方案,请使用:
having sum(case when c7 is null then 1 end) = 0
或
不存在
版本:
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。上面的答案返回c7只有NULL的c1值
如果问题是要查找c7不为NULL的c1值,请将子选择的不为NULL
更改为为NULL
如果一个c1值即使多次出现也只应返回一次,请执行
选择DISTINCT
请格式化,这很难读取?对不起,我听不懂你的英语,所以不知道你想要什么。@zerkms从标签上看,我猜是SQL Server而不是MySQL,但谁知道呢@DavidG第一个标记就是mysql。更不用说ALL
是一个ANSI SQL函数。注意:如果这个查询不使用隐式Bool->Numeric
cast,它会(更)对ANSI SQL友好。这个查询在mysql上运行吗?我试过了,但似乎没有results@A.D.乍一看-它应该在mysql上运行,并返回所有c7不等于null的c1
,老实说,我会使用COUNT()
,因为这里更具语义-我们需要得到元素的数量,而不是它们的摘要(即使后者是从前者派生出来的)因此,简单的COUNT(c7)=0
或COUNT(c7为空)=0
@zerkms FYICOUNT(c7为空)=0
不起作用-请自己从表t2中尝试——什么是t2
?
select c1
from tablename t1
where not exists (select 1 from tablename t2
where t1.c1 = t2.c1 and t2.c7 is not null)