【问题标题】:SQL- Selecting NULL columns onlySQL - 仅选择 NULL 列
【发布时间】:2016-07-11 23:44:54
【问题描述】:

我需要编写一个查询来查看一个表,并从中选择任何/所有具有 ALL NULL 行的列。

我宁愿不必说“SELECT(每个列名)”,而是说“SELECT(来自整个表,那些列)WHERE(行都是 NULL)。

我知道 CASE 和 WHEN 语句,但我的理解是必须在 select 语句中专门引用列。我将在许多不同的表上使用这个查询,有许多不同的维度和列名,所以我希望查询是通用的。

我在 Toad 中使用 SQL 和 Vertica 数据库。

这是我的表格的样子:

此表包含我需要查询的列。我需要查询的列是“owner_id”、NOT TYPE_NAME、NULLABLE 等。这个表中的每一行实际上是一个具有如此多值的列,而正是这些值我需要运行我的查询。

'Simply' put:如果一列有 ALL NULL 行,我需要识别和/或选择它。

有什么建议吗? %已解决^^^%

我找到了这个循环遍历列的示例,但尽管我进行了研究,但我仍然无法理解这一切。

如:col_names和column_name有什么区别? FROM 语句和 WHERE 中的文本相同。那些不应该都是表名吗?那么 found_rows() 是什么意思呢?

DECLARE col_names CURSOR FOR
  SELECT column_name
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = 'tbl_name'
  ORDER BY ordinal_position;

select FOUND_ROWS() into num_rows;

SET i = 1;
the_loop: LOOP

   IF i > num_rows THEN
        CLOSE col_names;
        LEAVE the_loop;
    END IF;

    FETCH col_names 
    INTO col_name;     

     //do stuff

    SET i = i + 1;  
END LOOP the_loop;

【问题讨论】:

  • 向我们展示一些示例表数据和预期结果!
  • 您真的有包含每列都为空的行的表吗?所以表上没有主键?
  • 在提供的图像中,示例将是“备注”(列中的所有空值)。鉴于此,您需要得到什么?所有非空列?
  • @apokryfos 我需要返回该列,因此我可以注意数据库中哪些表中的哪些列具有所有 NULL 值。同样,我的想法是我希望能够运行一个查询,该查询将为我检查和识别所有为 NULL 的列,而无需手动查看表并滚动查看所有 NULL。
  • “最简单”的方法是使用“information_schema”表(元数据)并获取表的可为空列列表,然后将查询生成为文本并运行它。见:dev.mysql.com/doc/refman/5.7/en/information-schema.html。参见“动态查询”,您可以在数据库中完成所有操作。但是,imo,使用脚本语言更容易。

标签: mysql sql toad


【解决方案1】:

据我了解,您想确定哪些列在所有行上都有 NULL 值并且不想键入所有列,对吗?

如果是这样,我会这样做:

1) 构建一个以 为输入参数并执行以下操作的函数: --仅供参考:这是一个伪代码。我这里没有 mysql 来获取正确的语法

select sum(
            case when CAST(<column_name> as varchar(5200)) is not null then 1 else 0 end --5200 seems to be your longer column
        )
from YOUR_TABLE
--the idea is to cast the column as anythig; if it is null, it gets a 0.
--If the sum across the rows is 0, it means that all the rows are null

2) 遍历列名并调用函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多