SQL-仅选择NULL列

时间:2016-07-07 14:27:10

标签: mysql sql toad

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

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

我知道CASE和WHEN语句,但我的理解是必须在select语句中专门引用列。我将在许多不同的表上使用此查询,具有许多不同的维度和列名称,因此我希望查询具有多种用途。

我在Toad中使用带有Vertica数据库的SQL。

这是我的表类似于:

TABLE_with_null

此表包含我需要查询的列。我需要查询的列是" owner_id",NOT TYPE_NAME,NULLABLE等。此表中的每一行实际上都是具有此类和如此多值的列,而我需要这些值运行我的查询。

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

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

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

如:col_names与column_name的区别如何?与FROM语句和WHERE中的文本相同。那些不是表名吗?那find_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;

1 个答案:

答案 0 :(得分:0)

据我所知,你想要确定哪些列在所有行上都有NULL值,而不想输入所有列,对吗?

如果是这样,我就是这样做的:

1)构建一个以输入参数为例的函数,并执行以下操作: --FYI:这是伪代码。我这里没有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)遍历列名并调用函数