SQL 嵌套连接或应用内应用

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

我目前使用以下代码

SELECT 
   c.number as cle
   coalesce(r.ban, w.ban) as ban

From "customers" "c"    
inner join ( "retail" "r"
    full outer join "wholesale" "w"
       on (r.cle = w.cle
       and r.ban = w.ban)
    )
on (c.cle = r.ban
or  c.cle = w.ban)

所以我让客户使用 r.ban 和/或 w.ban。 问题是性能使其无法与我们的数据库大小和连接数量一起使用

如果我用交叉应用替换内连接,性能会无限好,并且我得到了内连接的等效值。

如果我将完整的外连接添加为未嵌套的外连接,则它相当于左连接。

我不知道如何将外部连接嵌套为交叉应用的一部分,或者更佳的是如何将外部连接嵌套在交叉应用中。

Join 版本显示了合并禁令的正确输出。 https://dbfiddle.uk/SWPV_yW3

sql oracle join apply
1个回答
0
投票

我不知道如何嵌套外部连接作为交叉应用的一部分

您可以使用

CROSS APPLY
将查询重写为:

SELECT c.cle,
       rw.rban,
       rw.wban,
       coalesce(rw.rban,rw.wban)
FROM   customer c
       CROSS APPLY (
         SELECT r.ban AS rban,
                w.ban AS wban
         FROM   retail r
                FULL OUTER JOIN wholesale w
                ON      r.cle = w.cle
                    AND r.ban = w.ban
         WHERE c.cle = r.cle
         OR    c.cle = w.cle
       ) rw

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.