我從MySQL SELECT
詢問涉及LEFT JOIN
奇怪的結果,我不明白我對LEFT JOIN
的理解是否是錯誤的,或者我是否看到一個真正奇怪的行爲。MySQL LEFT JOIN SELECT不選擇所有左側記錄?
我有一個多對一關係的兩個表:對於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);
日期表有三個記錄,以及插槽1 - 而該紀錄指向日期的第三個記錄。
如果我做下面的查詢..
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 |
+------------+-----------------+
出現零計數的第一條記錄,但忽略具有零計數的較晚記錄。
我做錯了什麼,或者我只是不明白左連接應該做什麼?
它在MySQL中工作(只是測試它,並提供與其他答案相同的正確結果)。 – 2008-10-15 20:30:55