gpt4 book ai didi

sql - MySQL LEFT JOIN SELECT 不选择所有左侧记录?

转载 作者:行者123 更新时间:2023-11-29 03:52:02 29 4
gpt4 key购买 nike

我从 MySQL SELECT 得到奇怪的结果涉及 LEFT JOIN 的查询, 我不明白我对 LEFT JOIN 的理解是否正确是错误的还是我看到了一个真正奇怪的行为。

我有两个具有多对一关系的表:对于 table 1 中的每条记录table 2 中有 0 条或多条记录.我想选择表 1 中的所有记录,其中有一列计算表 2 中相关记录的数量。据我了解,LEFT JOIN应始终返回 LEFT 上的所有记录声明的一侧。

这是一个显示问题的测试数据库:

CREATE DATABASE Test;
USE Test;

CREATE TABLE Dates (
dateID INT UNSIGNED NOT NULL AUTO_INCREMENT,
date DATE NOT NULL,
UNIQUE KEY (dateID)
) TYPE=MyISAM;


CREATE TABLE Slots (
slotID INT UNSIGNED NOT NULL AUTO_INCREMENT,
dateID INT UNSIGNED NOT NULL,
UNIQUE KEY (slotID)
) TYPE=MyISAM;

INSERT INTO Dates (date) VALUES ('2008-10-12'),('2008-10-13'),('2008-10-14');
INSERT INTO Slots (dateID) VALUES (3);

Dates 表有 3 条记录,Slots 1 - 该记录指向 Dates 中的第三条记录。

如果我执行以下查询..

SELECT d.date, count(s.slotID) FROM Dates AS d LEFT JOIN Slots AS s ON s.dateID=d.dateID GROUP BY s.dateID;

..我希望看到一个包含 3 行的表格 - 两行的计数为 0,一行的计数为 1。但我实际看到的是:

+------------+-----------------+
| date | count(s.slotID) |
+------------+-----------------+
| 2008-10-12 | 0 |
| 2008-10-14 | 1 |
+------------+-----------------+

出现计数为零的第一条记录,但忽略计数为零的后续记录。

我做错了什么,还是我只是不明白 LEFT JOIN 应该做什么?

最佳答案

您需要GROUP BY d.dateID。在您的两个案例中,s.DateIDNULL (LEFT JOIN),它们组合在一起。

我想您还会发现这是无效的 (ANSI) SQL,因为 d.date 不是 GROUP BY 的一部分,也不是聚合操作的结果,因此不应该被SELECT编辑。

关于sql - MySQL LEFT JOIN SELECT 不选择所有左侧记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/205340/

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