如何用WHERE子句替代UNION改写SQL查询?
去除UNION改写SQL查询的方法
你可以把两个子查询的筛选条件合并到同一个WHERE子句中,用逻辑运算符OR连接,就能去掉UNION。原查询的两个筛选逻辑没有重叠(一个是status='Active',另一个是status='Cancelled'),所以合并后的结果和原UNION的结果完全一致。
改写后的完整SQL如下:
select id, status, date from table where status = 'Active' OR (status = 'Cancelled' AND cancel_reason_id IS NOT NULL)
需要注意的是,原查询使用UNION会自动去重,但因为两个子查询的status取值不同,本来就不会有重复行,所以用OR改写后不需要额外处理去重,结果和原查询完全一致。
内容的提问来源于stack exchange,提问作者Data_Analyst
相关产品推荐
相关产品推荐

