我正在编写一个应用程序并搜索特定的select语句。我的MYSQL数据库中的情况如下:
我通过以下表格了解了这种情况:
我现在想要的是:我希望用户输入一个subunit.id并获取一个包含所有entry.ids的列表,其中包含输入subunit.id,以及所有其他subunit.ids,其中与那些找到的entry.ids有关。结果应该像:
(输入=子单元5)
entry.id | subunit.id
条目1 |子单元5
条目1 |子单元26
条目2 |子单元2
条目2 |子单元5
...
只获取与输入subunit.id相关的entry.ids很容易。但我愚蠢地将eveything整合到一个SQL语句中。我通过创建两个不同的语句(在每个找到的entry.id中执行第二个语句)在我的应用程序中解决了它。是否有一个优雅的解决方案,把这一切都放到一个sql语句中?
非常感谢!
更新1
为了避免对此问题的评论中的误解:实际上有一个数据集。但是为了使问题尽可能理论化,一般化和易于理解,我只将其简化为“#34; ids"”。
答案 0 :(得分:1)
作为第一枪,我会尝试这样的事情。它可能不会马上工作(我没有测试过,对不起),但它可能会让你知道一个可能的解决方案。我不会称之为优雅,我会非常小心,特别是如果表和/或预期的输出很大。它可能不是最优的,如果分成两个语句可能会更好。
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;