You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何查询排除除主键外其余列全为NULL的行?

解决方案

针对你需要排除「除主键外所有列均为NULL」的行、且不想逐个列明判断的需求,提供两种通用实现方案:


方案1:动态生成查询条件(一次生成可长期复用,兼容所有SQL数据库)

你可以通过查询系统表自动拼接出所有非主键列的IS NULL判断条件,不用手动写72个列名。以MySQL为例,执行以下语句就能生成你需要的WHERE条件:

SELECT GROUP_CONCAT(COLUMN_NAME, ' IS NULL' SEPARATOR ' AND ') 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = '你的库名' 
  AND TABLE_NAME = 'emp_details' 
  AND COLUMN_NAME != 'empno'; -- 此处替换为你的实际主键列名

执行后会直接输出完整的非主键列空值判断串,复制到你的查询语句中替换对应条件部分即可直接使用。PostgreSQL、SQL Server等其他数据库也有对应系统表可以实现相同的动态拼接逻辑,原理一致。


方案2:JSON序列化判断(无需写任何列名,兼容MySQL 5.7+/PostgreSQL 9.2+/SQL Server 2016+等支持JSON的数据库)

利用JSON序列化自动识别NULL值的特性,直接判断排除所有非主键列为空的行,完全不用手动罗列字段:

MySQL 写法:

SELECT * 
FROM emp_details
WHERE JSON_LENGTH(
  JSON_REMOVE(
    JSON_OBJECT(*), -- 整行转JSON对象
    '$.empno' -- 剔除主键字段
  )->'$[*]?(@ != null)'
) > 0;

PostgreSQL 写法:

SELECT *
FROM emp_details
WHERE jsonb_strip_nulls(to_jsonb(emp_details) - 'empno') <> '{}'::jsonb;

该方案会自动适配所有非主键列,后续表结构新增、删除字段也不需要修改查询语句。


内容的提问来源于stack exchange,提问作者Ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:15:03