You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle (+)外连接符改写为LEFT JOIN的语法问题咨询

Oracle 特有(+)外连接语法转标准LEFT JOIN指南

核心转换规则

  • (+) 符号标记的字段所属的表为外连接的右表,关联时作为LEFT JOIN的匹配侧
  • 无(+)的多表等值关联属于INNER JOIN逻辑
  • 单表过滤条件可以放在对应表的JOIN ON子句中,也可以放在全局WHERE子句,建议放ON子句避免外连接后过滤出现语义偏差

第一个SQL转换示例

原SQL

SELECT x.a, y.a, z.a
FROM x, y, z
WHERE x.k = y.k(+)
AND x.p = z.p(+);

转换后标准LEFT JOIN写法

SELECT x.a, y.a, z.a
FROM x
LEFT JOIN y ON x.k = y.k
LEFT JOIN z ON x.p = z.p;

转换逻辑说明

原语句主表为x,y和z的关联字段都带(+),因此分别对y、z做左连接即可,逻辑完全等价。


第二个SQL转换示例

原SQL片段

FROM a,b,c
WHERE b.a  = '101'
AND a.a    = '202'
AND b.c    = a.c
AND a.d    = c.d(+)
AND ROWNUM = 1;

转换后标准JOIN写法

FROM a
INNER JOIN b ON a.c = b.c
LEFT JOIN c ON a.d = c.d
WHERE b.a = '101'
  AND a.a = '202'
  AND ROWNUM = 1;

转换逻辑说明

  1. a和b是等值关联无(+),属于INNER JOIN,关联条件为a.c = b.c
  2. c的关联字段带(+),作为左连接的右表,关联条件为a.d = c.d
  3. 单表过滤条件b.a = '101'、a.a = '202'和全局行限制条件ROWNUM = 1保留在WHERE子句中即可。

内容的提问来源于stack exchange,提问作者klabbaparn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:09:04