繁体   English   中英

MySQL 在两列上左连接

[英]MySQL left join on two columns

我有两个面板数据形式的表格,我想加入他们的 id 和 year。
表表table1

id  year    col1
---------------------
1   2008    1674.9240
1   2009    1714.4611
1   2010    2470.0510
1   2011    3524.2649
1   2012    3536.4431
1   2013    3694.0000
1   2014    3812.0000
1   2015    4788.0000
1   2016    8316.0000
1   2017    8036.0000
1   2018    10899.0000
1   2019    11092.0000

table2

id  year    col2
----------------
1   2010    2
1   2013    2
1   2016    15
1   2017    6

但是右表丢失了一些数据,所以我想离开它们,这样我就可以得到这样的结果:

id  year    col1         col2
-----------------------------
1   2008    1674.9240  
1   2009    1714.4611
1   2010    2470.0510    2
1   2011    3524.2649
1   2012    3536.4431
1   2013    3694.0000    2
1   2014    3812.0000
1   2015    4788.0000
1   2016    8316.0000    15
1   2017    8036.0000    6
1   2018    10899.0000
1   2019    11092.0000

我试过了,就像其他答案说的那样

select a.id, a.year, a.col1, b.col2 from table1 a
    left join table2 b on a.id=b.id and a.year=b.year;

但结果却是这样

id  year    col1        col2
----------------------------
1   2010    2470.0510   2
1   2013    3694.0000   2
1   2016    8316.0000   15
1   2017    8036.0000   6

它不应该是这样的,因为另一个答案显示了不同的结果
MySQL 版本是 MySQL 8.0.22,在 macOS Big Sur 11.1 beta 上运行,采用 Apple M1 芯片。

您的查询是正确的:

select a.id, a.year, a.col1, b.col2
from table1 a left join
     table2 b
     on a.id = b.id and a.year = b.year;

根据定义,这将返回a所有行,即使没有匹配项。 是一个 db<>fiddle。

也许还有其他事情正在发生——例如过滤掉不匹配项的where子句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM