首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择未在多个表中注册的行

如何选择未在多个表中注册的行
EN

Stack Overflow用户
提问于 2014-09-12 14:54:49
回答 4查看 68关注 0票数 1

我有三张桌子:

学生

代码语言:javascript
复制
id, name
1, Max
2, Brian

代码语言:javascript
复制
id, code, type
1, AIF102, Lab
2, AIF102, Class
3, AIF104, Class

student_class

代码语言:javascript
复制
student_id, class_id
1, 1

如何选择在student_class没有注册代码的学生所在的代码行。Ie,只需选择代码AIF104,学生是最大的。选择学生所在的代码AIF102和AIF104。抱歉,以前英语不太好。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-12 15:35:16

您可以使用“左联接”和“is null”来获取未注册的课程。

代码语言:javascript
复制
select c.*
from class c
left join student_class sc on(c.id = sc.class_id )
left join student s on (s.id = sc.student_id and s.id = 1 )
where  c.`type` = 'Class'
and sc.student_id  is null

Demo

当然,又一次对同名的尝试

代码语言:javascript
复制
select c.*
from class c
where not exists (
  select c1.code
  from class c1
  left join student_class sc on(c1.id = sc.class_id )
  where  sc.student_id  = 1
  and c1.code = c.code
)

Demo

票数 0
EN

Stack Overflow用户

发布于 2014-09-12 14:58:51

你可以这样做:

代码语言:javascript
复制
SELECT * FROM student S, class C, student_class SC WHERE
S.id = SC.student_id AND SC.class_id = C.id
票数 0
EN

Stack Overflow用户

发布于 2014-09-12 14:59:47

把所有的桌子连在一起。只要明确声明关系,就应该能够获得所需的记录。只需添加您自己的WHERE子句

代码语言:javascript
复制
SELECT s.name, c.code, c.type
FROM class c
     INNER JOIN student_class sc ON c.id = sc.class_id
     INNER JOIN student s ON s.id = sc.student_id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25811137

复制
相关文章

相似问题

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