首页 > 解决方案 > 更好的方法来内部连接表,其中一个表或另一个表中的值

问题描述

我有 3 张桌子,想把它们连在一起。查询需要很长时间。优化第二次加入的最佳方法是什么?

t1 有 id1,id2。t2 有 id1、id2。t3 只有 id1。

select t1.val, t2.val, t3.val from t1
inner join t2 on t1.id1 = t2.id1
inner join t3 
 on t3.id1 = t1.id2 or t3.id1 = t2.id2
where ...;

标签: sqlinner-join

解决方案


让我们将表 t3 的条件拆分为由 union all 组合的两个查询(如果您需要唯一值并且有可能有重复记录,则使用 union 而不是 union all。

select t1.val, t2.val, t3.val from t1
inner join t2 on t1.id1 = t2.id1
inner join t3 
 on t3.id1 = t1.id2 or t3.id1 = t2.id2
where ...
union all
select t1.val, t2.val, t3.val from t1
inner join t2 on t1.id1 = t2.id1
inner join t3 
 on t3.id1 = t2.id2
where ...

推荐阅读