【问题标题】:full join 2 tables in mariaDB在 MariaDB 中完全连接 2 个表
【发布时间】:2020-02-29 05:08:20
【问题描述】:

我有两张桌子

Table1
Year,Month, data     
2017,1,2
2018,2,10

Table2
Year,Month,data2
2017,1,5
2019,2,2

我正在尝试将表合并为 1 个表,我们从两个表中获取所有行,如下所示。

Year,Month,data,data2
2017 ,1,2,5
2018,2,10,NULL
2019,2,NULL,2

似乎标准外连接在这里不起作用,我也不能使用 Union ALL 是否有某种外连接查询来完成此操作?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 这是一个常见问题解答。在考虑发布之前,请始终使用谷歌搜索您的错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称和站点:stackoverflow.com 和标签,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。
  • @philipxy ,实际上我做了谷歌和搜索,我指出问题中似乎需要使用 Union 和 joins。我能找到的与 SO 最相似的问题是:如何在 MySQL 中进行 FULL OUTER JOIN?但是这个问题并没有解决这里的额外微妙之处,即在执行完全外连接之前需要用额外的列填充表。如果您认为这是重复的,请提供链接,我找不到具有相同结构的链接。请具有建设性,您推荐的标题是什么?我认为提出的解决方案并不容易找到!

标签: mysql sql join mariadb


【解决方案1】:

您真正想要的是full join。一种常用的方法是union allgroup by

select year, month, max(data) as data, max(data2) as data2
from ((select year, month, data, null as data2
       from table1
      ) union all
      (select year, month, null, data2
       from table2
      )
     ) t
group by year, month;

【讨论】:

    【解决方案2】:

    您应该使用 UNION 从两个表中获取所有年份和月份,并使用左连接将其关联到表 1 和表 2

    select a.Year , a.Month, b.data, c.data2
    from (
      select Year,Month
      from Table1
      union 
      select Year,Month
      from Table2
    ) a 
    left join  table1 b  on a.Year = b.Year and a.month = b. month 
    left  join table2 c on a.Year = c.Year and a.month = c. month 
    

    【讨论】:

    • 哇,没想到这么简单的合并操作需要这么复杂的查询!
    • @shev72 .. 对于 SQL,这并不复杂 .. 如果你看一下 .. 联合子查询返回你需要的值作为主值 .. 两个左连接只是检索你需要的值形成每个表。
    • 也许有一天,MySQL/MariaDB 会支持FULL OUTER JOIN
    • @Parfait ...正确..谁知道..这是一条捷径..但不难克服..
    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 2018-03-04
    • 2015-05-02
    • 2014-08-08
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多