带有OR条件的FULL OUTER JOIN

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

我有2个表,有2个不同的id。我想基于2个不同的id和一些其他参数加入,但问题是1 id并不总是匹配。有时身份证号码1会有匹配,有时身份证号码2将不匹配,有时候两者都匹配。

full outer join子句中使用ORJOIN条件确实减慢了我的查询速度。有更有效的方法吗? 我知道你可以在内连接的情况下使用联合,但我不确定如何使用外连接进行优化。

SELEC A.*, B.*
FROM A
FULL OUTER JOIN  B
    ON  (A.id_1 = B.id_1 or A.id_2 = B.id_2)
    AND A.pay_month = B.pay_month
    AND A.plan = B.plan
sql join optimization ssms
1个回答
0
投票

嗯。 。 。这可能就足够了:

select A.*, B.*
from A full outer join 
     B
     on A.id_1 = B.id_1 and A.pay_month = B.pay_month and A.plan = B.plan
union  -- intentionally to remove duplicates
select A.*, B.*
from A full outer join 
     B
     on A.id_2 = B.id_2 and A.id_1 <> B.id_1 and A.pay_month = B.pay_month and A.plan = B.plan;

这不是100%等效 - 例如,即使在表中也会删除重复项。此外,union增加了删除重复项的开销。但结果可能对您的目的有利。

还有,full outer join真的有必要吗?我很少在我的代码中使用它。

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