【发布时间】: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,使用脚本语言更容易。