【问题标题】:MySQL Conditionally Inner Join X # of columnsMySQL 条件内连接 X # 列
【发布时间】:2021-07-07 13:50:48
【问题描述】:

我有两张表,Table1 和 Table2。

基于Table1上的列内的值,我可以从Table2内连接一定数量的列,JOIN on ID。

表1:

id | col_number | 
1  |     2
2  |     3

表2:

id | col1 | col2 | col3
1  | BRK | GOOG | APPL
2  |AMZN | INTC | TSLA

预期结果,如果查询是针对 ID1 运行的:

id | col_number | col1  | col2
1  |   2        | BRK   | GOOG

我还没有找到很多容易让我尝试理解的条件内连接示例。我发现的条件是不同的表,而不是列。

小提琴:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=4efaf735c1f28fa8a9e55d77ca30fa71

【问题讨论】:

    标签: mysql


    【解决方案1】:

    必须在解析和准备查询之前修复 SQL 查询的选择列表,并且这发生在查询开始读取任何数据行之前。这意味着您不能根据它读取的某些行中的数据值进行返回不同列数的查询。

    此外,任何查询结果的每一行中的列数都必须相同,而不是动态列数。

    但是,您可以根据数据值使某些表达式在某些列中返回 NULL。

    SELECT table1.id, table1.col_number,
      CASE WHEN table1.col_number >= 1 THEN table2.col1 ELSE NULL END AS col1,
      CASE WHEN table1.col_number >= 2 THEN table2.col2 ELSE NULL END AS col2,
      CASE WHEN table1.col_number >= 3 THEN table2.col3 ELSE NULL END AS col3
    FROM table1 JOIN table2 USING (id);
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2014-11-01
      • 2015-09-20
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 2011-11-08
      相关资源
      最近更新 更多