MySQL:交替左连接三个表

MySQL: alternate to left join over three tables

我有三个 table 具有以下结构。

Table child

ID , Name, ....

3, John, ...

5, erik,....

7, Maya

child id 与第二个 table 中的老师有关。

Table teacher_child_relation

id, child_id, teacher_id

1, 3(john), 4(roberts)

2, 5(erik), 9(maria)

老师的详细信息在第三个table。

Table teacher

id, Name,....

4, Roberts

9, Maria

现在我运行下面的查询来获取分配给child的老师的姓名。我正在使用以下查询。

SELECT c.*, t.name,
FROM child c, teacher_child_relation ct, teacher t
WHERE c.id = ct.child_id AND ct.teacher_id = t.id

这个returns我只有child任老师的那些记录。我想要一个 returns child 的所有记录的查询,并显示一个未分配教师的空字段。

首先:对于一个 child 的所有老师,你会得到几行,我不确定你是否知道这一点。

其次:如何反对漂亮的左连接?

select c.*, t.name
from child c
left join teacher_child_relation ct on ct.child_id = c.id
left join teacher t on t.id = ct.teacher_id

您也可以尝试只列出每个 child 一次,并获得此 child 的所有教师的串联列表。这取决于你需要什么。

SELECT child.ID, child.Name, teacher.Name
FROM child
LEFT JOIN teacher_child_relation ON child.Id = teacher_child_relation.child_id
LEFT JOIN teacher ON teacher.id = teacher_child_relation.teacher_id;

1) 这会给出所有 children 的信息,无论教师是否分配给 child,

SELECT c.`id` AS `child_od`,c.`Name` AS `child_name`,t.`Name` AS `teacher_name`
FROM child c
LEFT JOIN teacher_child_relation tc ON c.`id`=tc.`child_id`
LEFT JOIN teacher t ON tc.`teacher_id`=t.`id`;

2) 这仅提供分配给教师的 child 的信息,

SELECT c.`id` AS `child_id`,c.`Name` AS `child_name`,t.`Name` AS `teacher_name`
FROM child c
JOIN teacher_child_relation tc ON c.`id`=tc.`child_id`
JOIN teacher t ON tc.`teacher_id`=t.`id`;

我建议您只需点击几下即可使用 SQLyog wherein you can generate the above query,它还提供了连接表的选项,因此无需记住 sql 语句的语法。