SQL 所有非空列的语句
SQL Statement For All Columns Not Null
我正在处理一个查询,我的 table 非常大,有很多列。我不想在 where 子句中输入每个单独的列 - 有没有一种方法可以 select 全部而不用写它们,像这样的东西(下面不起作用):
select *
from table t
where t.* is not NULL
另一种选择,如果你愿意,可以在你的 where 子句中做类似的事情(假设你在 table 中的列数是 10):
Select T.*
from [TABLE] T
where 1|2|3|4|5|6|7|8|9|10 is not null
您可以尝试从 information_schema.columns
table 中查找字段然后执行 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
我正在处理一个查询,我的 table 非常大,有很多列。我不想在 where 子句中输入每个单独的列 - 有没有一种方法可以 select 全部而不用写它们,像这样的东西(下面不起作用):
select *
from table t
where t.* is not NULL
另一种选择,如果你愿意,可以在你的 where 子句中做类似的事情(假设你在 table 中的列数是 10):
Select T.*
from [TABLE] T
where 1|2|3|4|5|6|7|8|9|10 is not null
您可以尝试从 information_schema.columns
table 中查找字段然后执行 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