gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:12:45 26 4
gpt4 key购买 nike

我有两个表要加入。

表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);

这给了我一张巨大的 table 。行数比 T1 多得多。

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

最佳答案

在没有看到数据样本和期望输出的情况下,很难理解您正在尝试做什么,但我猜您对 LEFT 的内容没有正确的理解JOIN 确实如此。

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

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

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

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

关于mysql - 如何在两列上左连接两个 MySQL 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39518864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com