我有一个不是我自己创建的数据库。我需要从中提取一些特定的数据,但我正在努力思考如何在不执行多个查询并循环代码中的结果集的情况下获取数据。我环顾过其他问题,但没能走得太远。
我的数据结构是(非常简洁,省略了不相关的行和列):
MyDb.Source
+--------+-------------+--------------------------------------+
| ID | SOURCE_TYPE | URL |
+--------+-------------+--------------------------------------+
| 10 | 3 | https://en.wikipedia.org |
+--------+-------------+--------------------------------------+
MyDb.Resource
+--------+------------+--------------------------------------+
| ID | SOURCE_FK | IDENTIFIER |
+--------+------------+--------------------------------------+
| 1 | 10 | All_Saints_Church,_Marple |
+--------+------------+--------------------------------------+
MyDb.Item_Base
+--------+-------------+--------------------------------------+
| ID | RESOURCE_FK | ITEM_TITLE |
+--------+-------------+--------------------------------------+
| 55 | 1 | All Saints Church, Marple |
+--------+-------------+--------------------------------------+
MyDb.Item
+--------+-------------+--------------------------------------+
| ID | BASE_FK | ITEM_DESCRIPTION |
+--------+-------------+--------------------------------------+
| 120 | 55 | Foo bar |
+--------+-------------+--------------------------------------+
来源 - 资源是一对多。
资源 - 基数为 1 比 1。
Item_Base - 项目为 1 比 1。
我想做什么?
我希望从 MyDb.Source
返回尽可能少的查询以查找与其相关的所有项目。我手中唯一的信息是源的 ID
,即 10。我希望最终得到一个 Item.ID
结果集,其中仅包含那些其中 Source.ID
为 10。
最佳答案
我认为您可以在单个查询中将四个表内部连接在一起。这应该是安全的,因为为了使源和项目之间存在关系,后者必须可以通过关键关系访问。
SELECT
t1.ID AS source_id,
t4.*
FROM Source t1
INNER JOIN Resource t2
ON t1.ID = t2.SOURCE_FK
INNER JOIN Item_Base t3
ON t2.ID = t3.RESOURCE_FK
INNER JOIN Item t4
ON t3.ID = t4.BASE_FK
WHERE
t1.ID = 10
关于MySQL - FK 的多个表的回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45756993/