MySQL在两列上左连接

MySQL在两列上左连接,mysql,sql,left-join,Mysql,Sql,Left Join,我有两个面板数据表,我想在id和年份上加入它们。 表表1 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 20

我有两个面板数据表,我想在id和年份上加入它们。
表1

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
表2

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版上,带有苹果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
中的所有行,即使没有匹配项。他是一把小提琴


也许还有别的事情发生了,比如一个
where
子句过滤掉了不匹配项。

谢谢你的回答,但是我没有添加任何
where
子句,我的查询与上面显示的一样。我在Navicat 15中运行查询,可能是Navicat的问题?@FacelessMage。它应该在您编写查询时传递查询。你确定数据正确吗?我再次尝试,发现查询工作正常,我犯了一个错误,没有彻底检查所有结果。我的结果中有40000多行,MySQL会自动对结果进行排序,所有col2中带有null的行都远远低于此值。再次感谢你!MySQL(和其他一些DBMS)允许下一个语法
ON(table1.id,table1.year)=(table2.id,table2.year)
看起来足够清晰。但是结果是这样的,看起来真实的查询包含了一些
table2
列未显示的WHERE条件。