我有一个 MySQL 左连接问题。
我有三个要加入的表。
人表:
创建表人( id INT NOT NULL AUTO_INCREMENT, 键入 ENUM('student', 'staff', 'guardian') NOT NULL, first_name CHAR(30) NOT NULL, 姓氏 CHAR(30) 非空, 性别 ENUM('m', 'f') NOT NULL, dob VARCHAR(30) 非空, 主键(id) );
学生表:
创建表学生( id INT NOT NULL AUTO_INCREMENT, person_id INT NOT NULL, primary_guardian INT NOT NULL, secondary_guardian INT, join_date VARCHAR(30) 非空, status ENUM('current', 'graduated', 'expelled', 'other') NOT NULL, 导师组 VARCHAR(30) 非空, year_group VARCHAR(30) 非空, 主键(id), FOREIGN KEY (person_id) REFERENCES person(id) ON DELETE CASCADE, 外键(primary_guardian)参考监护人(id), FOREIGN KEY (secondary_guardian) REFERENCES Guardian(id), 外键(导师组)参考导师组(名称), FOREIGN KEY (year_group) REFERENCES year_group(name) );
还有一个事件表:
CREATE TABLE 事件 ( id INT NOT NULL AUTO_INCREMENT, 学生 INT NOT NULL, 员工 INT NOT NULL, 监护人 INT NOT NULL, sent_home BOOLEAN NOT NULL, 疾病类型 VARCHAR(255) 非空, action_taken VARCHAR(255) 非空, event_date DATETIME NOT NULL, 主键(id), 外键(学生)参考学生(id), 外键(员工)参考员工(id), 外键(监护人)参考监护人(id) );
我要选择的是第 9 年每个学生的名字、姓氏和事件数量。
这是我对查询的最佳尝试:
选择 p.first_name, p.last_name, COUNT(i.student) FROM person p, student s LEFT JOIN event i ON s.id = i.student WHERE p.id = s.person_id AND s.year_group LIKE "%Year 9%";
但是,它会忽略任何没有发生事件的学生,这不是我想要的 - 他们应该显示但计数为 0。如果我删除左连接和计数,那么我会得到所有学生,如我所料。
我可能误解了 left join 但我认为它应该做的,基本上是我想要做的?
谢谢你的帮助,
亚当