如何简化SQL代码以找出表中所有含NULL值的行
简化查找含任意NULL值行的SQL代码
针对你的需求——找出Customer_Details表中任意列存在NULL值的行,这里提供几种简化方案:
通用SQL方案(所有数据库适用)
不需要依赖数据库特定功能,只是调整逻辑结构,比一堆OR更整洁:
SELECT * FROM Customer_Details WHERE NOT ( customer_id IS NOT NULL AND transaction_dt IS NOT NULL AND payment_type IS NOT NULL -- 依次补充完剩余16列的`IS NOT NULL`判断 AND quantity IS NOT NULL )
原理是:排除所有列都不为NULL的行,剩下的就是至少有一个NULL值的行,逻辑和你原来的代码完全等价,但结构更清晰。
特定数据库专属简化方案
如果你的数据库支持特定函数/扩展,可以彻底避免手动列所有19列:
MySQL/MariaDB
利用JSON函数将行转成JSON格式,匹配其中的NULL值:
SELECT * FROM Customer_Details WHERE JSON_OBJECT(*) REGEXP ':null(,|}$)'
JSON_OBJECT(*)会把整行数据转为JSON字符串,其中NULL值会显示为:null,正则用来匹配这个模式。
PostgreSQL
借助hstore扩展(需先启用),将行转为键值对后检查NULL:
-- 先启用hstore扩展(只需执行一次) CREATE EXTENSION IF NOT EXISTS hstore; SELECT * FROM Customer_Details WHERE EXISTS ( SELECT 1 FROM each(hstore(Customer_Details)) WHERE value IS NULL )
SQL Server
通过FOR JSON生成JSON后检查NULL:
SELECT * FROM Customer_Details cd WHERE (SELECT cd.* FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER) LIKE '%:null%'
内容的提问来源于stack exchange,提问作者lily
相关产品推荐
相关产品推荐

