在 MariaDB 中完全连接 2 个表

Posted

技术标签:

【中文标题】在 MariaDB 中完全连接 2 个表【英文标题】:full join 2 tables in mariaDB 【发布时间】: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 是否有某种外连接查询来完成此操作?

【问题讨论】:

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

以上是关于在 MariaDB 中完全连接 2 个表的主要内容,如果未能解决你的问题,请参考以下文章

运行时获取 ResNet 模型全连接层的输入

inner join(内连接)left join(左连接)right join(右连接)full join(全连接)区别

如何在 PyTorch 中高效实现非全连接线性层?

CRF和全连接CRF的区别?

全连接理解2

mysql laravel 可以外连接还是全连接?