MySQL SELECTを含むクエリから奇妙な結果が得られます。私の理解が間違っているのか、それとも本当に奇妙な動作が見られているのかLEFT JOINわかりません。LEFT JOIN
多対 1 の関係を持つ 2 つのテーブルがtable 1ありますtable 2。テーブル 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 の 3 番目のレコードを指しています。
次のクエリを実行すると..
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 行のテーブルが表示されることを期待しています。2 行はカウント 0 で、1 行はカウント 1 です。しかし、実際に表示されるのは次のとおりです。
+------------+-----------------+
| date | count(s.slotID) |
+------------+-----------------+
| 2008-10-12 | 0 |
| 2008-10-14 | 1 |
+------------+-----------------+
ゼロ カウントの最初のレコードが表示されますが、ゼロ カウントの後のレコードは無視されます。
私は何か間違ったことをしていますか、それとも LEFT JOIN が何をすべきか理解していませんか?