Oracle 19c下改写含子查询的视图关联SQL为无嵌套子查询
改写无关联子查询的Oracle SQL实现
可以通过左连接+分组聚合的方式替代原关联子查询,确保输出结果与原查询完全一致,适用于Oracle 19c环境:
SELECT d.device_id AS msisdn, d.name, d.serviceTag, NVL(SUM(p.amount), 0) AS plans, 0 AS tax_amount, 0 AS total FROM XWDDSB143.v_getDevices_detailed_report d LEFT JOIN XWDDSB143.v_getplans p ON p.device_id = d.device_id WHERE d.device_id = '97440010917' GROUP BY d.device_id, d.name, d.serviceTag;
改写说明:
- 使用
LEFT JOIN确保即使v_getplans中没有对应device_id的数据,设备表的记录依然会被保留,和原查询中子查询返回0的逻辑一致 - 通过
GROUP BY按设备的唯一标识字段分组,聚合计算amount的总和,再用NVL将聚合后的NULL值转换为0,匹配原查询的NVL(Sum(amount), 0)逻辑 - 所有非聚合字段(
device_id、name、serviceTag)都需包含在GROUP BY子句中,符合Oracle的分组规则
内容的提问来源于stack exchange,提问作者to-find
相关产品推荐
相关产品推荐

