带有OR条件的FULL OUTER JOIN

时间:2018-03-01 21:28:33

标签: sql join optimization ssms

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

full outer join子句中使用带有OR条件的JOIN确实会降低查询速度。有没有更有效的方法呢?
我知道你可以在内连接的情况下使用联合,但我不确定如何使用外连接进行优化。

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

1 个答案:

答案 0 :(得分: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真的有必要吗?我很少在我的代码中使用它。