如何删除UNION联合查询结果中的NULL值记录
你当前第二个查询中的CASE表达式存在逻辑冗余:case when address is null then address else null end无论address是否为NULL,最终返回结果都是NULL,这是结果集出现大量NULL行的核心原因。
方案1:最小改动,最终结果统一过滤
无需修改原有子查询逻辑,将UNION整体作为子查询,外层加过滤条件即可:
SELECT * FROM ( -- 此处替换为你原有完整的UNION查询 query A.... UNION SELECT (CASE WHEN address IS NULL THEN address ELSE NULL END) AS address ...... ) AS union_total WHERE address IS NOT NULL;
方案2:子查询提前过滤(性能更优)
分别在两个子查询中先过滤掉NULL值,减少UNION合并时的数据量,执行效率更高:
- 给query A追加过滤条件:
WHERE address IS NOT NULL - 简化第二个查询的冗余CASE逻辑,同时追加过滤条件:
-- 简化后的第二个查询示例,不需要额外CASE判断 query A WHERE address IS NOT NULL UNION SELECT address FROM 你的表名 WHERE address IS NOT NULL
如果你确实需要保留原有CASE逻辑,写法如下:
query A WHERE address IS NOT NULL UNION SELECT (CASE WHEN address IS NULL THEN address ELSE NULL END) AS address FROM 你的表名 WHERE address IS NOT NULL
内容的提问来源于stack exchange,提问作者pollate2345
相关产品推荐
相关产品推荐

