我目前使用以下代码
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
我不知道如何嵌套外部连接作为交叉应用的一部分
您可以使用
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