SQL- 仅选择 NULL 列
SQL- Selecting NULL columns only
我需要编写一个查询,该查询将查看 table,并从中查看 select any/all 具有所有空行的列。
我宁愿不必说 "SELECT (each column name)",而宁愿说“SELECT(来自整个 table,那些列)WHERE(行都是 NULL)。
我知道 CASE 和 WHEN 语句,但我的理解是必须在 select 语句中专门引用列。我将在许多不同的 table 上使用这个查询,具有许多不同的维度和列名,所以我希望查询是通用的。
我在 Toad 中使用 SQL 和 Vertica 数据库。
这是我的 table 看起来类似于:
此 table 包含我需要查询的列。我需要查询的列有 "owner_id", NOT TYPE_NAME, NULLABLE 等。 THIS table 中的每一行实际上是一个具有如此多值的列,它是这些值我需要 运行 我的查询。
'Simply' 放:如果一个列有 ALL NULL 行,我需要识别 and/or select 它。
有什么建议吗? %已解决^^^%
我找到了循环遍历列的方法示例,但尽管进行了研究,但我仍然无法理解这一切。
如:col_names和column_name有什么区别? FROM 语句和 WHERE 中的文本也是如此。那些不应该都是 table 名字吗?那么 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;
据我了解,您想确定哪些列在所有行上都具有 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) 遍历列名并调用函数
我需要编写一个查询,该查询将查看 table,并从中查看 select any/all 具有所有空行的列。
我宁愿不必说 "SELECT (each column name)",而宁愿说“SELECT(来自整个 table,那些列)WHERE(行都是 NULL)。
我知道 CASE 和 WHEN 语句,但我的理解是必须在 select 语句中专门引用列。我将在许多不同的 table 上使用这个查询,具有许多不同的维度和列名,所以我希望查询是通用的。
我在 Toad 中使用 SQL 和 Vertica 数据库。
这是我的 table 看起来类似于:
此 table 包含我需要查询的列。我需要查询的列有 "owner_id", NOT TYPE_NAME, NULLABLE 等。 THIS table 中的每一行实际上是一个具有如此多值的列,它是这些值我需要 运行 我的查询。
'Simply' 放:如果一个列有 ALL NULL 行,我需要识别 and/or select 它。
有什么建议吗? %已解决^^^%
我找到了循环遍历列的方法示例,但尽管进行了研究,但我仍然无法理解这一切。
如:col_names和column_name有什么区别? FROM 语句和 WHERE 中的文本也是如此。那些不应该都是 table 名字吗?那么 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;
据我了解,您想确定哪些列在所有行上都具有 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) 遍历列名并调用函数