PostgreSQL:IS NOT NULL语句未生效,需移除指定列含空值的行
问题分析与解决
你写的第一个查询逻辑搞反了——OR的意思是只要其中一列不为空就会被选中,这当然过滤不掉那些有一个空值的行。
你要移除所有x_orig或x_dest为空的行,反过来就是只保留x_orig和x_dest都不为空的行,所以查询条件应该用AND而非OR:
SELECT * FROM dump WHERE x_orig IS NOT NULL AND x_dest IS NOT NULL;
如果是要直接删除这些需要移除的行,用这条语句:
DELETE FROM dump WHERE x_orig IS NULL OR x_dest IS NULL;
另外你提到第二个查询能选出要移除的行,也可以用NOT取反来实现保留目标行的效果,和上面的SELECT语句等价:
SELECT * FROM dump WHERE NOT (x_orig IS NULL OR x_dest IS NULL);
内容的提问来源于stack exchange,提问作者AronBrownie
相关产品推荐
相关产品推荐

