如何筛选出所有列均为NULL值的数据行?
筛选所有列均为NULL的行的简便方法
针对30列的表,手动逐个写column IS NULL确实低效,这里分几种常用数据库给出高效解决方案:
PostgreSQL
PostgreSQL支持直接判断整行是否全为NULL,一行语句就能搞定:
SELECT * FROM TABLE1 t WHERE row(t.*) IS NULL;
MySQL/MariaDB
可以通过系统表自动生成查询语句,完全不用手动列所有列:
- 先执行以下语句生成完整查询:
SELECT CONCAT('SELECT * FROM TABLE1 WHERE ', GROUP_CONCAT(column_name, ' IS NULL SEPARATOR ' AND ' ')) AS full_query FROM information_schema.columns WHERE table_schema = '你的数据库名称' AND table_name = 'TABLE1';
- 把查询结果里的
full_query值复制出来直接运行,就能得到所有全NULL的行。
或者用COALESCE的方式生成语句:
SELECT CONCAT('SELECT * FROM TABLE1 WHERE COALESCE(', GROUP_CONCAT(column_name SEPARATOR ', '), ') IS NULL;') AS full_query FROM information_schema.columns WHERE table_schema = '你的数据库名称' AND table_name = 'TABLE1';
SQL Server
利用sys.columns系统视图生成查询语句:
SELECT 'SELECT * FROM TABLE1 WHERE ' + STRING_AGG(QUOTENAME(name) + ' IS NULL', ' AND ') AS full_query FROM sys.columns WHERE object_id = OBJECT_ID('TABLE1');
执行后复制生成的full_query运行即可。
另外,如果你想用COALESCE的方式,也可以直接从数据库客户端导出表的所有列名,复制后用逗号分隔放进COALESCE里——大部分客户端(如DBeaver、Navicat)都支持一键复制列名,比手动输入快很多:
SELECT * FROM TABLE1 WHERE COALESCE(col1, col2, col3, ..., col30) IS NULL;
内容的提问来源于stack exchange,提问作者timmtamsar
相关产品推荐
相关产品推荐

