mysql - 所有列不为空的 SQL 语句

标签 mysql sql database where-clause

我正在处理一个查询,我的表非常大,有很多列。我不想在 where 子句中键入每个单独的列 - 有没有一种方法可以让我在不编写它们的情况下选择所有列,如下所示(下面不起作用):

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

最佳答案

您可以尝试从information_schema.columns表中查找字段,然后执行动态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

关于mysql - 所有列不为空的 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50651295/

相关文章:

database - VS 2012 数据库项目 "unresolved reference to object"错误

sql - 如何将 group by 与应始终包含的值一起使用?

mysql - 如果值小于上一行,则删除下一行

java - 无法配置 JAAS 身份验证

mysql - Dopped FK constraint to delete a record and cannot add it after. MySQL

java - 使用 SOLR 4.0 索引许多表,然后在查询期间加入它们?

拥有数千张表的 MySQL 数据库

php - php从数据库中检索多个数据到数组中

在 INSERT 或 UPDATE 上触发的 MySQL 触发器?

php - 解析、格式化查询结果并将其存储为变量