【发布时间】:2010-09-17 08:20:42
【问题描述】:
我从涉及LEFT JOIN 的MySQL SELECT 查询中得到奇怪的结果,我不明白我对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 表有三条记录,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 应该做什么?
【问题讨论】: