【问题标题】:How to replicate FULL JOIN multiple times in MySQL?如何在 MySQL 中多次复制 FULL JOIN?
【发布时间】:2016-09-04 21:37:52
【问题描述】:

我看过有关如何在 MySQL 中对 2 个表进行完全联接的文章。我还阅读了this 的多个表,但这是我的独特问题。

我有多个临时表(SQL 查询的结果,但为简单起见,下面显示为表)

Table1
ID  Value1
1   A
2   B

Table2
ID  Value2
2   C
3   D

Table3
ID  Value3
1   E
3   F

Table4
....

等等(至少 10 个表)。我需要的是这个

ID  Value1  Value2  Value3  Value4 ....
1   A               E
2   B       C
3           D       F
4 .......

尝试在没有 FULL 连接的情况下执行此操作似乎非常复杂。我可以在 MySQL 中实现这一目标的最简单方法是什么?

【问题讨论】:

  • 你是说你想从所有这些表中获取而不使用连接?
  • 这应该可以解决问题: SELECT main.ID, t1.Value1, t2.Value2, t3.Value3, FROM ( SELECT DISTINCT IFNULL(t1.ID, IFNULL(t2.ID, t3.ID )) ID FROM TABLE1 t1, TABLE2 t2, TABLE3 t3) 主左连接 TABLE1 t1 ON main.ID = t1.ID 左连接 TABLE2 t2 ON main.ID = t2.ID 左连接 TABLE3 t3 ON main.ID = t3.ID
  • @KP - 我对使用联接持开放态度,但如果没有 MySQL 不提供的完整外部联接功能,我似乎无法找到一种优雅的方式来实现这一点。所以我愿意接受任何建议。
  • @Dr.缝合假设只有三个表 - 我有多个表(至少 10 个),并且一遍又一遍地这样做会有问题。
  • @max_max_mir 这是一个糟糕的数据库设计,为什么不把它做成一张表呢?并将它们作为空值放在每一列中?

标签: mysql join


【解决方案1】:

如果您想在没有完全连接的情况下组合这么多表(查询结果),那么最简单的方法是使用 union distinct 生成一个完整的 id 列表,然后左连接该列表中的所有表:

select tid.id, table1.value, ..., tableN.value from
    (select id from table1
     union distinct
     select id from table2
     ...) tid
left join table1 on tid.id=table1.id
...
left join tableN on tid.id=tableN.id

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 2021-09-06
    相关资源
    最近更新 更多