您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> MYSQL >> sql外键表关联查询的一个问题

sql外键表关联查询的一个问题

来源:网络整理     时间:2018/1/25 13:26:29     关键词:

关于网友提出的“ sql外键表关联查询的一个问题”问题疑问,本网通过在网上对“ sql外键表关联查询的一个问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: sql外键表关联查询的一个问题
描述:

业务背景

一个学校有很多老师
每个老师都教很多不同的班
现在要找出同时教1,2,3班的老师

环境

node.js+sequelize+mysql

表结构

  • 老师表:teacher(id,name)
  • 班级表:class(id,name)
  • 老师班级表:teacher_class(id,teacherId,classId)

问题

sql语句怎么查呢?
sequelize中怎么用呢?

尝试

select teacherId from teacher_class where classId in [1,2,3]
//这个连只教1班的也会查出来
select teacherId from teacher_class where classId = 1 and classId =2 and classId =3
//这个显然不可能

解决方案1:

#确保你的teacher_class表有unique index(teacherId, classId)
SELECT teacherId,COUNT(1) FROM teacher_class 
WHERE classId IN(1,2,3)
GROUP BY teacherId
HAVING COUNT(1)=3
解决方案2:

SELECT a.teacherId
FROM   teacher_class a
       INNER JOIN teacher_class b ON b.teacherId = a.teacherId AND b.classId = 2
       INNER JOIN teacher_class c ON c.teacherId = a.teacherId AND c.classId = 3
WHERE  a.classId = 1
解决方案3:

select tt.* from(
select a.id,count(1) as cnt from teacher a
    join teacher_class b on a.id=b.teacherId
where b.classId in(1,2,3)
group by a.id
) t join teacher tt on t.id=tt.id

以上介绍了“ sql外键表关联查询的一个问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/4535025.html

相关图片

相关文章