Mysql:n列数null

Mysql:n列数null,mysql,sql,Mysql,Sql,我有一个包含7个字段的表,我想选择任意3列中具有空值的记录创建表脚本 select * from tableName having sum((case when column1 is null than 1 end)+ (case when column2 is null than 1 end)+ (case when column3 is null than 1 end)+ (case when column4 is null than 1 end)+ (case when column5

我有一个包含7个字段的表,我想选择任意3列中具有空值的记录

创建表脚本

select * 
from tableName 
having sum((case when column1 is null than 1 end)+
(case when column2 is null than 1 end)+
(case when column3 is null than 1 end)+
(case when column4 is null than 1 end)+
(case when column5 is null than 1 end)+
(case when column6 is null than 1 end)+
(case when column7 is null than 1 end)) >= 3 
Create Table SevenColumnTable
(
Col1 varchar(10),
Col2 varchar(10),
Col3 varchar(10),
Col4 varchar(10),
Col5 varchar(10),
Col6 varchar(10),
Col7 varchar(10)
);
插入样本

Insert into SevenColumnTable(Col1,Col2,Col3,Col4)
Select 'A','B','C','D';

Insert into SevenColumnTable(Col5,Col2,Col3,Col4)
Select 'A','B','C','D';


Insert into SevenColumnTable(Col2,Col3,Col4)
Select 'A','B','C';


Insert into SevenColumnTable(Col5,Col2,Col3)
Select 'A','B','C';
选择语句

SELECT * FROM SevenColumnTable where 
ifnull(Col1,1)+ifnull(Col2,1)+ifnull(Col3,1)+ifnull(Col4,1)+ifnull(Col5,1)+ifnull(Col6,1)
+ifnull(Col6,1)=3;

创建表脚本

Create Table SevenColumnTable
(
Col1 varchar(10),
Col2 varchar(10),
Col3 varchar(10),
Col4 varchar(10),
Col5 varchar(10),
Col6 varchar(10),
Col7 varchar(10)
);
插入样本

Insert into SevenColumnTable(Col1,Col2,Col3,Col4)
Select 'A','B','C','D';

Insert into SevenColumnTable(Col5,Col2,Col3,Col4)
Select 'A','B','C','D';


Insert into SevenColumnTable(Col2,Col3,Col4)
Select 'A','B','C';


Insert into SevenColumnTable(Col5,Col2,Col3)
Select 'A','B','C';
选择语句

SELECT * FROM SevenColumnTable where 
ifnull(Col1,1)+ifnull(Col2,1)+ifnull(Col3,1)+ifnull(Col4,1)+ifnull(Col5,1)+ifnull(Col6,1)
+ifnull(Col6,1)=3;

好吧,因为其他人很难编写查询。下面是:

select * 
from mytable
where (col1 is null) + (col2 is null) + (col3 is null) + 
      (col4 is null) + (col5 is null) + (col6 is null) + (col7 is null) = 3;

这在MySQL中使用true=1和false=0。无论如何,我在这里所做的只是计算空值。

好吧,因为其他人都很难编写查询。下面是:

select * 
from mytable
where (col1 is null) + (col2 is null) + (col3 is null) + 
      (col4 is null) + (col5 is null) + (col6 is null) + (col7 is null) = 3;


这在MySQL中使用true=1和false=0。无论如何,我在这里所做的只是计算空值。

欢迎使用堆栈溢出!请出示你的问题。您应该至少包括您遇到问题的代码的大纲(但最好是a),然后我们可以尝试帮助解决特定问题。你也应该阅读。虽然两个答案都有缺陷,但你会从中知道如何得到想要的结果。除此之外,这项任务很奇怪。这是课堂练习吗?很难想象在一个设计合理的数据库中,一个表中记录中的任何三个字段都是空的信息会有帮助。如果有些表有5个空值,会发生什么?您想要它们还是只需要3个?欢迎使用堆栈溢出!请出示你的问题。您应该至少包括您遇到问题的代码的大纲(但最好是a),然后我们可以尝试帮助解决特定问题。你也应该阅读。虽然两个答案都有缺陷,但你会从中知道如何得到想要的结果。除此之外,这项任务很奇怪。这是课堂练习吗?很难想象在一个设计合理的数据库中的一个表中,记录中的任何三个字段都是空的信息会有帮助。如果有些表有5个空值,会发生什么情况?您想要它们还是只想要3个?@希望我共享您知道
IFNULL
的作用吗?似乎不是这样。查询将无法按预期工作。请看这里:很抱歉,我可能不是mysql的专家,它给我的结果[
IFNULL(Col1,1)
在Col1为null时返回1,否则返回Col1本身。因此
IFNULL(null,1)
返回1,
IFNULL(1,1)
返回1,
IFNULL(3,1)
返回3。是否确实要使用Col1-6中的值进行计算?我不这么认为。此外,您在示例表中的varchar和int上使用+。因此,为了执行加法,该列被转换为数字。“a”被转换为0,“123”被转换为123。(由于MySQL非常特殊的转换方式,“12A”被转换为12。)无论如何,这里不只是计算空列。我只是添加列值以获得3的计数,如果计数不等于3,则记录不能包含在result@Wish我做了共享。你知道
IFNULL
做什么吗?看起来不是这样。查询不会像预期的那样工作。请看这里:对不起,我可能不是mysql方面的专家,它给出的结果[
IFNULL(Col1,1)
在Col1为null时返回1,否则返回Col1本身。因此
IFNULL(null,1)
返回1,
IFNULL(1,1)
返回1,
IFNULL(3,1)
返回3。是否确实要使用Col1-6中的值进行计算?我不这么认为。此外,您在示例表中的varchar和int上使用+。因此,为了执行加法,该列被转换为数字。“a”被转换为0,“123”被转换为123。(由于MySQL非常特殊的转换方式,“12A”被转换为12。)无论如何,您在这里不只是计算空列。我只是添加列值以获得3的计数,如果计数不等于3,则记录不能包含在结果中。该服务器正在尝试使用MYSql服务器。为什么
SUM
?为什么
具有
?甚至将
*
SUM
混合在一起?在我看来是非常错误的。@ThorstenKettner yes*不需要感谢直到,OP从来没有要求聚合,而是单个记录。1+null+null+1+1+null+1?他正在尝试使用MYSql服务器。为什么
SUM
?为什么
拥有
*
?甚至将
SUM
混合在一起。在我看来非常错误。@ThorstenKettner yes*不需要感谢到目前为止,OP从未要求聚合,而是要求单个记录。1+null+null+1+1+null+1是什么?太棒了。说到点子上。太棒了。说到点子上。