如何将SQL从左连接转换为(+)

问题描述 投票:0回答:1

有人可以帮助我如何将 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
转换为
(+)
可以得到相同的结果。

sql oracle outer-join
1个回答
0
投票

所有

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>
© www.soinside.com 2019 - 2024. All rights reserved.