【问题标题】:SQL Statement For All Columns Not Null所有非空列的 SQL 语句
【发布时间】:2018-11-12 01:26:52
【问题描述】:

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

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

【问题讨论】:

  • 只需输入即可。如果这是一个问题,那么很可能是您的表格设计不佳
  • 你可以用information_schema.columns写你想要的表达式。
  • 看起来这在一行中是不可能的。检查这个stackoverflow.com/questions/639531/…
  • 您可以轻松使用其他工具(如excel)轻松构建整个语句
  • 表格很长,打字不是一种选择(我同意设计陈旧且糟糕)感谢信息_schema.columns

标签: mysql sql database where-clause


【解决方案1】:

您可以尝试从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

【讨论】:

  • 这太棒了!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2019-09-09
    • 2021-03-03
    • 1970-01-01
    相关资源
    最近更新 更多