【问题标题】:How to Left Join two MySQL tables on two columns?如何在两列上左连接两个 MySQL 表?
【发布时间】:2016-09-16 03:56:03
【问题描述】:

我有两个要加入的表。

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

【问题讨论】:

    标签: mysql left-join


    【解决方案1】:

    如果不查看数据样本以及期望输出的内容,很难理解您要做什么,但我猜您对 LEFT JOIN 的作用没有正确的理解.

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

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

    T1 LEFT JOIN T2 的作用是从 T1 输出给定的行,即使 T2 中有 no 行匹配。

    我猜你可能想要这样的东西:从 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

    【讨论】:

    • 您好,有多个值行满足 t1.id=t2.id 但只有一个匹配 t1.id=t2.id AND t1.date= t2.日期。我为说明添加了值
    • 谢谢。我遇到的问题是我认为只有一行符合(t1.id=t2.id) AND (t1.date=t2.date) 限制,但在查看数据后我意识到情况并非如此。我很感激
    猜你喜欢
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多