带有OR条件的FULL OUTER JOIN
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有OR条件的FULL OUTER JOIN相关的知识,希望对你有一定的参考价值。
我有2个表,有2个不同的id。我想基于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
答案
嗯。 。 。这可能就足够了:
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
真的有必要吗?我很少在我的代码中使用它。
以上是关于带有OR条件的FULL OUTER JOIN的主要内容,如果未能解决你的问题,请参考以下文章
pgSQL FULL OUTER JOIN 'WHERE' 条件
Oracle表与表之间的连接方式(内连接:inner join 外连接 全连接: full outer join左连接:left outer join 右连接:right outer join(代码
FULL OUTER JOIN 不能在没有连接两边的字段相等的条件下使用