sql - 更好的方法来内部连接表,其中一个表或另一个表中的值
问题描述
我有 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 ...;
解决方案
让我们将表 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 ...
推荐阅读
- python - 卷积神经网络的输入
- c# - 如何将异常详细信息从智利传递给父类(不同的异常类型)
- matlab - Matlab中的矩形总和
- python - 在 python 中加密消息时收到错误“无效的 DES 密钥大小。密钥必须正好是 8 个字节长”
- javascript - ReferenceError:在 Azure javascript 函数中未定义 URL
- sql-server - ASP.NET Core Web Api 发布到 IIS 产生 Sql Server 连接错误
- firefox - Firefox 无法在 ws://localhost:58330/sockjs-node/775/15qeeqvw/websocket 建立与服务器的连接
- amazon-web-services - 在 CloudFormation 中使用 Stack 的标签
- cakephp - 对 hasMany 和 BelongsToMany 模型使用 **joinType** 的替代方法
- django - 过滤显示在 Django 模板中的数据