有人可以帮助我如何将 SQL(PL-SQL) 从左连接转换为 (+) 吗?
左连接示例如下。我想知道如何将左连接转换为 (+) 操作?
with a as (
select 1 as a1, 1 as a2 from dual
union select 1, 2 from dual
union select 2, 1 from dual
union select 2, 2 from dual
),
b as (
select 1 as b1, 1 as b2, null as b3 from dual
union select 2, 2, 1 from dual
union select 2, 2, null from dual
)
select *
from a
left join b on a.a1 = b.b1
and a.a2 = b.b2
and (b.b3 is not null or b.b3 > 0)
如果我执行以下操作,结果集会有所不同
select *
from a, b
where a.a1 = b.b1(+)
and a.a2 = b.b2(+)
and (b.b3 is not null or b.b3 > 0)
我希望将
left join
转换为 (+)
可以得到相同的结果。
所有
b
列都必须具有外连接运算符:
SQL> WITH
2 a
3 AS
4 (SELECT 1 AS a1, 1 AS a2 FROM DUAL
5 UNION
6 SELECT 1, 2 FROM DUAL
7 UNION
8 SELECT 2, 1 FROM DUAL
9 UNION
10 SELECT 2, 2 FROM DUAL),
11 b
12 AS
13 (SELECT 1 AS b1, 1 AS b2, NULL AS b3 FROM DUAL
14 UNION
15 SELECT 2, 2, 1 FROM DUAL
16 UNION
17 SELECT 2, 2, NULL FROM DUAL)
18 SELECT *
19 FROM a, b
20 WHERE a.a1 = b.b1(+)
21 AND a.a2 = b.b2(+)
22 AND ( b.b3(+) IS NOT NULL
23 OR b.b3(+) > 0);
A1 A2 B1 B2 B3
---------- ---------- ---------- ---------- ----------
2 2 2 2 1
2 1
1 2
1 1
SQL>