MySQL在两列上左连接
我有两个面板数据表,我想在id和年份上加入它们。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
表
表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条件。