所有列的SQL语句不为空

时间:2018-06-01 21:38:43

标签: mysql sql database where-clause

我正在处理一个查询,而且我的表格很大,很多列。我不想在where子句中键入每个单独的列 - 有没有一种方法我可以选择所有而不写它们,这样的事情(下面不起作用):

select *
from table t
where t.* is not NULL

2 个答案:

答案 0 :(得分:3)

您可以尝试从information_schema.columns表中查找字段,然后执行dynamic sql

像这样。

SET @Efields := '';
SET @Esql:='';
SET @Table_Name = 'table1';

select @Efields := GROUP_CONCAT(COLUMN_NAME SEPARATOR ' IS NOT NULL AND ') 
from information_schema.columns
where TABLE_NAME = @Table_Name;
SELECT @Esql:=CONCAT('select * from ',@Table_Name ,'  WHERE ',@Efields,' IS NOT NULL ');

PREPARE stmt1 FROM  @Esql; 
EXECUTE stmt1; 
DEALLOCATE PREPARE stmt1;

sqlfiddle:https://www.db-fiddle.com/f/32PisE5bChKSVPzk6LjEP3/0

答案 1 :(得分:1)

如果您愿意,可以选择在where子句中执行类似的操作(假设表中的列数为10):

Select T.*
from [TABLE] T
where 1|2|3|4|5|6|7|8|9|10 is not null