带有 SQL (mysql) 的复杂 select 语句
Complicated select statement with SQL (mysql)
我正在编写一个应用程序并搜索特定的 select 语句。我的 MYSQL 数据库中的情况如下:
- 每个 条目 可以有几个 单位。一个单位对应一个条目。
- 每个单元可以有几个亚单元。一个亚单位可以与多个单位相关。
我通过下表了解了这种情况:
- 条目: id (int)
- 单位:id(int),entry_id(int)
- unit_subunits: unit_id (int), subunit_id (int)
- 子单元: id (int)
我现在想要的是以下内容:我希望用户输入 subunit.id 并获取包含所有 entry.ids 的列表,其中还包含输入 subunit.id与所有其他 subunit.id 一样,这些 subunit.id 与找到的 entry.ids 相关。结果应如下所示:
(输入=子单元 5)
entry.id | subunit.id
条目 1 |亚基 5
条目 1 |亚基 26
条目 2 |亚基 2
条目 2 |亚基 5
...
仅获取与输入 subunit.id 相关的 entry.ids 很容易。但我未能将所有内容整合到一个 SQL 语句中。我在我的应用程序中解决了它,方法是创建两个不同的语句(第二个语句针对每个找到的 entry.id 执行)。有没有一个优雅的解决方案,将所有这些都放在一个 sql 语句中?
非常感谢!
更新 1
为了避免像这个问题的评论中的误解:实际上有一个数据集。但是为了让问题尽可能的理论化、笼统化和易于理解,我只将它简化为"ids"。
作为第一枪,我会尝试这样的事情。它可能不会立即起作用(抱歉,我还没有测试过),但它可能会让您了解一个可能的解决方案。我不会称之为优雅,而且我会非常小心,特别是如果表 and/or 预期输出很大。它可能不是最佳的,如果分成两个语句可能会更好。
SELECT e.id AS entryid, us2.subunit_id AS subunitid,
FROM unit_subunits AS us1
JOIN unit AS u1 ON (us1.unit_id = u1.id)
JOIN entry AS e ON (u1.entry_id = e.id)
JOIN unit AS u2 ON (e.id = u2.entry_id)
JOIN unit_subunits AS us2 ON (u2.id = us1.unit_id)
WHERE us1.subunit_id = 5;
我正在编写一个应用程序并搜索特定的 select 语句。我的 MYSQL 数据库中的情况如下:
- 每个 条目 可以有几个 单位。一个单位对应一个条目。
- 每个单元可以有几个亚单元。一个亚单位可以与多个单位相关。
我通过下表了解了这种情况:
- 条目: id (int)
- 单位:id(int),entry_id(int)
- unit_subunits: unit_id (int), subunit_id (int)
- 子单元: id (int)
我现在想要的是以下内容:我希望用户输入 subunit.id 并获取包含所有 entry.ids 的列表,其中还包含输入 subunit.id与所有其他 subunit.id 一样,这些 subunit.id 与找到的 entry.ids 相关。结果应如下所示:
(输入=子单元 5)
entry.id | subunit.id
条目 1 |亚基 5
条目 1 |亚基 26
条目 2 |亚基 2
条目 2 |亚基 5
...
仅获取与输入 subunit.id 相关的 entry.ids 很容易。但我未能将所有内容整合到一个 SQL 语句中。我在我的应用程序中解决了它,方法是创建两个不同的语句(第二个语句针对每个找到的 entry.id 执行)。有没有一个优雅的解决方案,将所有这些都放在一个 sql 语句中?
非常感谢!
更新 1
为了避免像这个问题的评论中的误解:实际上有一个数据集。但是为了让问题尽可能的理论化、笼统化和易于理解,我只将它简化为"ids"。
作为第一枪,我会尝试这样的事情。它可能不会立即起作用(抱歉,我还没有测试过),但它可能会让您了解一个可能的解决方案。我不会称之为优雅,而且我会非常小心,特别是如果表 and/or 预期输出很大。它可能不是最佳的,如果分成两个语句可能会更好。
SELECT e.id AS entryid, us2.subunit_id AS subunitid,
FROM unit_subunits AS us1
JOIN unit AS u1 ON (us1.unit_id = u1.id)
JOIN entry AS e ON (u1.entry_id = e.id)
JOIN unit AS u2 ON (e.id = u2.entry_id)
JOIN unit_subunits AS us2 ON (u2.id = us1.unit_id)
WHERE us1.subunit_id = 5;