在 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 all
和group 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 个表的主要内容,如果未能解决你的问题,请参考以下文章
inner join(内连接)left join(左连接)right join(右连接)full join(全连接)区别