如何筛选含主键外其他非空列的行以减少每日插入行数?
解决方法:筛选非主键列至少有一个非空的行
完全可以用SQL的条件判断轻松实现这个需求,核心就是检查除主键(PK1、PK2)外的列中,至少有一个列的值不为NULL。下面给你几种通用且易懂的实现方式:
方法一:直观的多条件OR判断
这是兼容性最强、最容易理解的写法,直接在WHERE子句里逐个检查每一列是否非空:
SELECT PK1, PK2, cl1, cl2, cl3, cl4 FROM your_table WHERE cl1 IS NOT NULL OR cl2 IS NOT NULL OR cl3 IS NOT NULL OR cl4 IS NOT NULL;
针对你给出的示例数据,最后一行b Marty null null null null会被过滤掉,其他行都会被保留——因为它们至少有一个非主键列有值。
方法二:取反逻辑简化写法
如果非主键列数量很多,逐个写OR会有点繁琐,你可以反过来判断:排除所有非主键列全为NULL的行,逻辑和方法一完全等价:
SELECT PK1, PK2, cl1, cl2, cl3, cl4 FROM your_table WHERE NOT (cl1 IS NULL AND cl2 IS NULL AND cl3 IS NULL AND cl4 IS NULL);
额外小技巧:用COALESCE简化代码
如果你的数据库支持COALESCE函数(MySQL、PostgreSQL、SQL Server等主流数据库都支持),还可以用更简洁的写法(注意前提是非主键列的数据类型可以兼容,比如都是数值或字符串类型):
SELECT PK1, PK2, cl1, cl2, cl3, cl4 FROM your_table WHERE COALESCE(cl1, cl2, cl3, cl4) IS NOT NULL;
COALESCE会返回参数列表里第一个非NULL的值,若所有参数都是NULL则返回NULL,以此完成筛选判断。
内容的提问来源于stack exchange,提问作者Valentin C
相关产品推荐
相关产品推荐

