带有SQL的复杂select语句(mysql)

时间:2015-03-19 21:14:02

标签: mysql sql select

我正在编写一个应用程序并搜索特定的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.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"”。

1 个答案:

答案 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;