我需要编写一个查看表的查询,并从中选择任何/所有具有ALL NULL行的列。
我更愿意不必说" SELECT(每个列名)",而宁愿说" SELECT(来自整个表,那些列)WHERE(行都是NULL)
我知道CASE和WHEN语句,但我的理解是必须在select语句中专门引用列。我将在许多不同的表上使用此查询,具有许多不同的维度和列名称,因此我希望查询具有多种用途。
我在Toad中使用带有Vertica数据库的SQL。
这是我的表类似于:
此表包含我需要查询的列。我需要查询的列是" 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;
答案 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)遍历列名并调用函数