首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:在三个表上替换为左联接

MySQL:在三个表上替换为左联接
EN

Stack Overflow用户
提问于 2015-09-11 05:43:02
回答 3查看 2.3K关注 0票数 0

我有三张表,其结构如下。

表子 身份证名字..。 3约翰..。 5,埃里克,..。 7,玛雅

孩子的身份证和第二张桌子上的老师有关。

表teacher_child_relation id,child_id,teacher_id 1,3(john),4(roberts) 2,5(erik),9(maria)

教师的详细情况列在第三张桌子上。

餐桌教师 身份证名字..。 4,Roberts 9,Maria

现在,我正在运行下面的查询,以获得分配给一个孩子的老师的名字。我使用以下查询。

代码语言:javascript
复制
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

这只会给我那些被分配给老师的孩子的记录。我想要一个查询,返回所有的子记录,并显示一个空字段,其中没有分配教师。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-11 06:32:12

1)这给出了所有孩子的信息,而不管分配给孩子的老师是谁,

代码语言:javascript
复制
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)这只提供了分配给老师的孩子的信息,

代码语言:javascript
复制
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,您只需单击几下就可以使用生成上述查询,并且它还提供了表上联接的选项,从而消除了记住sql语句语法的需要。

票数 2
EN

Stack Overflow用户

发布于 2015-09-11 05:49:11

第一:一个孩子和所有的老师都会有好几行,我不知道你是否知道这一点。

第二:什么反对一个很好的左加入?

代码语言:javascript
复制
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

您还可以尝试只列出每个孩子一次,并获得该孩子的所有教师的连接列表。这取决于你需要什么。

票数 2
EN

Stack Overflow用户

发布于 2015-09-11 05:52:05

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32516251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档