MySQL - FK 的多个表的回溯

标签 mysql relationship

我有一个不是我自己创建的数据库。我需要从中提取一些特定的数据,但我正在努力思考如何在不执行多个查询并循环代码中的结果集的情况下获取数据。我环顾过其他问题,但没能走得太远。

我的数据结构是(非常简洁,省略了不相关的行和列):

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/

相关文章:

php - 如何按last_visit排序并显示用户的最近访问者?

php - 如何通过查询从 mysql 数据库表创建的数组并在另一个 php 文件中使用该数组?

php - hasmanythrough 关系不起作用

java - 在 Java 中实现组合

MySQL:优化 COUNT(*) 和 GROUP BY

mysql - 在 MySQL 中执行函数时 SELECT 命令被拒绝

尝试删除行时 MySQL 错误代码 1093

mysql - mysql中的数组替代

javascript - MongoDB 迭代文档集合

mysql - bd 关系 MySQL