【问题标题】:MySQL: Select with SubQueryMySQL:使用子查询选择
【发布时间】:2021-06-30 14:18:09
【问题描述】:

我需要有关条件选择/子查询语句的帮助。

我有三个表,Tab1、Tab2 和 Tab3。每个表都有一个 ID 列。

表 1:

id | code
1  | 1
2  | 2
3  | 1

Tab2:

id | results
1  | data1
2  | data2
3  | data3

Tab3:

id | results
1  | data1
2  | data2
3  | data3

如果 id1 的 Tab1.code 为 1,那么我希望一个 select 语句返回 Tab2 中 id1 的所有结果。如果 id1 的 Tab1.code 为 2,那么我希望从 Tab3 返回 id1 的所有结果。

我一直在玩多个子查询,但无法正常工作。

这是一个基本结构的小提琴:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=044b04ea153b15fc3ce17cefc292f6bc

【问题讨论】:

    标签: mysql


    【解决方案1】:

    如果你只有2个子表2和3,你可以试试这个解决方案:

    SELECT t1.id, t1.code, t2.results
    FROM Tab1 t1
    JOIN Tab2 t2
    ON t1.code = 1 AND t1.id = t2.id
    UNION
    SELECT t1.id, t1.code, t3.results
    FROM Tab1 t1
    JOIN Tab3 t3
    ON t1.code = 2 AND t1.id = t3.id
    

    【讨论】:

    • 谢谢!这适用于我的示例。我想我会为我的实际构建提供超过 2 个子表。有什么建议吗?
    • @John_Scully,通过为表提供更合法的上下文而不是恒定的二级、三级表,也许重新设计可能是一个更好的选择。但是对于 Tab1、Tab2、Tab3 和没有上下文的示例,您可能会得到一个答案(这没关系),但您的长期可能会成为一个障碍。
    • @DRapp,感谢您的反馈。展望未来,我将尝试提供更好的示例,如果没有人建议处理额外的表,我会考虑重建。
    • @John_Scully,很好。如果有任何东西被认为是私人/机密,您不必提供 LIVE 数据样本,只需使用测试数据来了解意图。
    • 您的问题是关于动态查询,我不建议这样做。您还有另一种使用 LEFT JOIN 的安全方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多