例如,如何知道是否所有列都只包含空值
ID | col1 | col2 |col3 | col4
-----------+----------+-----------+-----------+-----------
1 | Null |Null | with value| with value
2 |with value|Null | with value| with value
3 |with value|Null | Null | Null
4 |with value|Null | with value| with value
5 |with value|Null | Null | Null
6 |Null |Null | Null | Null
7 |with value|Null | with value| with value
8 |with value|Null | Null | Null
只有col2
为 NULL,因此结果应仅col2
。
ID | col2 |
-----------+----------+
1 |Null |
2 |Null |
3 |Null |
4 |Null |
5 |Null |
6 |Null |
7 |Null |
8 |Null |
任何帮助将不胜感激。
计算非 NULL 的列:
SELECT 0 = count(col1) AS col1_all_null,
0 = count(col2) AS col2_all_null,
...
FROM mytable;
这利用了聚合函数忽略 NULL 值的事实(好吧,至少几乎所有值)。
为什么你想要所有NULL
列的所有行? 你知道这些值是什么。
此外,SQL 查询只能返回一组固定的列,因此无法筛选列。 如果您只想要一个列名的列表,其所有值都NULL
,您可以将这些名称连接在一起:
select concat_ws(',',
(case when count(col1) = 0 then 'col1' end),
(case when count(col2) = 0 then 'col2' end),
(case when count(col3) = 0 then 'col3' end)
)
from t;