我有两张不同身份证的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
答案 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
真的有必要吗?我很少在我的代码中使用它。