首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL: 4表“有多个直通”连接?

MySQL: 4表“有多个直通”连接?
EN

Stack Overflow用户
提问于 2010-04-15 03:57:09
回答 3查看 2K关注 0票数 4

假设我有以下4个表(为了举例):Owners、Trucks、Boxes、Apple。

一个车主可以有很多辆卡车,一辆卡车可以有很多箱子,一个箱子可以有很多苹果。

车主都有自己的身份证。卡车有id和owner_id。盒子有一个id和truck_id。苹果有id和box_id。

假设我想让一个id = 34的所有者“拥有”所有的苹果。所以我想要得到所有的苹果,这些苹果装在车主34拥有的卡车上的盒子里。

如果你愿意,有4个表的“层次”,每个表只引用它的直接“父级”。如何在满足其他3个表的条件的同时快速筛选框?

我希望这是有意义的。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-15 03:59:47

代码语言:javascript
复制
select a.* 
from Trucks t
inner join Boxes b on t.id = b.truck_id
inner join Apples a on b.id = a.box_id
where t.owner_id = 34
票数 4
EN

Stack Overflow用户

发布于 2010-04-15 04:00:29

你只需要从“顶层”(所有者)开始,一直加入到你想要的地方:

代码语言:javascript
复制
SELECT a.*
FROM Owners o
INNER JOIN Trucks t ON t.owner_id = o.id
INNER JOIN Boxes b on b.truck_id = t.id
INNER JOIN Apples a on a.box_id = b.id
WHERE o.id = ?

如果经常需要这样的查询,并且您正在处理非常大的数据集,那么有时对数据进行一点反规范化也是有意义的。例如,通过将owner_id添加到apples表。它使插入/更新数据变得更加困难,但可以使查询变得更容易。

票数 1
EN

Stack Overflow用户

发布于 2010-04-15 04:02:17

代码语言:javascript
复制
    SELECT a.*
      FROM Apples a
INNER JOIN Boxes b ON b.id = a.box_id
INNER JOIN Trucks t ON t.id = b.truck_id
INNER JOIN Owners o ON o.id = t.owner_id
     WHERE o.id = 34

如果以后不需要关于所有者的任何信息,您可以通过省略与所有者的连接并只选择where t.owner_id = 34来稍微简化这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2640575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档