【问题标题】:Join columns from more than 2 tables in sqlite and fill the missing values with null在 sqlite 中加入超过 2 个表的列,并用 null 填充缺失值
【发布时间】:2015-11-10 07:36:53
【问题描述】:

我在 sqlite 数据库中有 5 个表,我想将特定列组合到一个新表(FULL JOIN)。如果一个表包含不在另一个表中的日期,则应将其添加到结果表中,并且其他列值应为空。见例子。

table_a

| myDate      | value_column |
|-------------|--------------|
| 2015-01-01  |      1       |
| 2015-01-03  |      3       |

table_b

| myDate      | value_column |
|-------------|--------------|
| 2015-01-01  |      1       |
| 2015-01-02  |      2       |

table_c

| myDate      | value_column |
|-------------|--------------|
| 2015-01-01  |      1       |
| 2015-01-04  |      4       |

table_d

| myDate      | value_column |
|-------------|--------------|
| 2015-01-01  |      1       |
| 2015-01-02  |      2       |

table_e

| myDate      | value_column |
|-------------|--------------|
| 2015-01-01  |      1       |
| 2015-01-03  |      3       |

结果表:

| myDate      | value_column_a | value_column_c | value_column_c | value_column_d | value_column_e |
|-------------|----------------|----------------|----------------|----------------|----------------|
| 2015-01-01  |      1         |      1         |      1         |      1         |      1         |
| 2015-01-02  |      null      |      2         |      null      |      2         |      null      |
| 2015-01-03  |      3         |      null      |      4         |      null      |      3         |
| 2015-01-04  |      null      |      null      |      null      |      null      |      null      |

提前致谢!

【问题讨论】:

  • 感谢您的提示。但我仍然不明白如何在两个以上的桌子上使用它。 (我已经阅读了 cmets)。

标签: sql sqlite join


【解决方案1】:

首先收集所有可能的日期值,然后您可以使用它们对所有数据表进行 LEFT JOIN:

SELECT myDate,
       table_a.value_column AS value_column_a,
       table_b.value_column AS value_column_b,
       table_c.value_column AS value_column_c,
       table_d.value_column AS value_column_d,
       table_e.value_column AS value_column_e
FROM (SELECT myDate FROM table_a UNION
      SELECT myDate FROM table_b UNION
      SELECT myDate FROM table_c UNION
      SELECT myDate FROM table_d UNION
      SELECT myDate FROM table_e)
LEFT JOIN table_a USING (myDate)
LEFT JOIN table_b USING (myDate)
LEFT JOIN table_c USING (myDate)
LEFT JOIN table_d USING (myDate)
LEFT JOIN table_e USING (myDate);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多