如何在两列上连接两个MySQL表?

时间:2016-09-15 19:25:58

标签: mysql left-join

我有两张桌子正在加入。

表1:T1

|id|date|hits|
--- ----- ------
A1   01   2
A1   02   2
A2   02   3

表2:T2

|id|date|runs|
--- ----- ------
A1   01   1
A2   02   0
A3   02   2

输出:

|id|date|hits|runs|
--- ----- --- ---
A1   01   2    1
A1   02   2    0
A2   02   3    0

每个ID都有多个日期,每个日期有不同的匹配/运行。

我试过了:

SELECT t1.*,t2.*
FROM Table1 t1
LEFT JOIN Table2 t2 ON (t1.id=t2.id) AND (t1.date=t2.date);

这给了我一张巨大的表格。行的方式多于T1。

T2中的行数多于T1,但我只关心T1中的日期,因此LEFT JOIN。

1 个答案:

答案 0 :(得分:0)

如果没有看到数据样本以及您希望输出的内容,您很难理解您要做的事情,但我猜你不会这样做正确理解LEFT JOIN的作用。

T1 LEFT JOIN T2 将行数限制为每行T1一行。

如果T2中有多个行与T1中的给定行匹配,则连接的结果将包括T2的所有匹配行。

即使T2中的没有行匹配,T1 LEFT JOIN T2从T1输出给定行也是如此。

我猜你可能想要这样的东西:从T1输出每一行,加入T2的最新匹配行。如果是这样,Stack Overflow上已经发布了许多解决方案。查找标记为的问题。

重新评论:

谢谢,我用您提供的测试数据测试了您的查询。它没有给出您显示的结果。结果是:

SELECT t1.*,t2.*
FROM Table1 t1
LEFT JOIN Table2 t2 ON (t1.id=t2.id) AND (t1.date=t2.date)
ORDER BY t1.id, t1.date;
+------+------+------+------+------+------+
| id   | date | hits | id   | date | runs |
+------+------+------+------+------+------+
| A1   | 01   |    2 | A1   | 01   |    1 |
| A1   | 02   |    2 | NULL | NULL | NULL |
| A2   | 02   |    3 | A2   | 02   |    0 |
+------+------+------+------+------+------+

演示:http://sqlfiddle.com/#!9/cece2/2

我认为您运行的查询与您上面发布的内容不同。也许你在加入条件中混淆了ANDOR