MySQL の左結合の問題があります。
参加しようとしているテーブルが 3 つあります。
人物表:
CREATE TABLE 人 (
ID INT NOT NULL AUTO_INCREMENT、
type ENUM('生徒', 'スタッフ', '保護者') NOT NULL,
first_name CHAR(30) NOT NULL、
last_name CHAR(30) NOT NULL、
性別 ENUM('m', 'f') NOT NULL,
dob VARCHAR(30) NOT NULL,
主キー (ID)
);
学生テーブル:
CREATE TABLE 学生 (
ID INT NOT NULL AUTO_INCREMENT、
person_id INT NOT NULL、
primary_guardian INT NOT NULL,
セカンダリ ガーディアン INT、
join_date VARCHAR(30) NOT NULL、
status ENUM('current', '卒業', '追放', 'other') NOT NULL,
tutor_group VARCHAR(30) NOT NULL,
year_group VARCHAR(30) NOT NULL、
主キー (ID)、
FOREIGN KEY (person_id) REFERENCES person(id) ON DELETE CASCADE,
FOREIGN KEY (primary_guardian) REFERENCES ガーディアン(id),
FOREIGN KEY (secondary_guardian) REFERENCES ガーディアン(id),
FOREIGN KEY (tutor_group) REFERENCES tutor_group(name),
FOREIGN KEY (year_group) REFERENCES year_group(名前)
);
インシデント テーブル:
CREATE TABLE インシデント (
ID INT NOT NULL AUTO_INCREMENT、
学生INT NOT NULL、
スタッフINT NOT NULL、
ガーディアンINT NOT NULL、
sent_home BOOLEAN NOT NULL,
disease_type VARCHAR(255) NOT NULL,
action_taken VARCHAR(255) NOT NULL,
インシデント_日付DATETIME NOT NULL、
主キー (ID)、
FOREIGN KEY (学生) REFERENCES 学生(ID),
FOREIGN KEY (staff) REFERENCES staff(id),
FOREIGN KEY (ガーディアン) REFERENCES ガーディアン(id)
);
私が選択しようとしているのは、9 年生の各生徒の名、姓、およびインシデントの数です。
クエリでの私の最善の試みは次のとおりです。
SELECT p.first_name, p.last_name, COUNT(i.student) FROM person p, student s LEFT JOIN インシデント i ON s.id = i.student WHERE p.id = s.person_id AND s.year_group LIKE "%Year 9%";
しかし、それは私が望むものではないインシデントのない学生を無視します - それらは表示されるべきですが、カウントは 0 です。
私はおそらく左結合を誤解していましたが、本質的に私がやろうとしていることは何だと思いましたか?
ご協力いただきありがとうございます、
アダム