Mysql 查询一对多的两个表,多条数据全为相同的值

Xnzy 发布于 2018/03/01 11:28
阅读 2K+
收藏 0

举个例子:有个教师表,有两个列 id 和 教师名字; 有个学生表,有三列:姓名, 性别和教师id, 现在要查询学生全为男生的教师有哪些? (一条sql)

加载中
0
vikon
vikon

最直接想就一条 select * from 教师表 where not exists (select * from 学生表 where 学生表.教师id=教师表.id and 学生表.性别='女')

帅的温柔
帅的温柔
这种没有学生的老师也查出来了。不符合
X
Xnzy
回复 @没有脾气的好好先生 : 赞,学到了
没有脾气的好好先生
没有脾气的好好先生
select a.* from 教师表 a join 学生表 b on a.教师id=b.教师id where count(1)==sum(case b.性别 when '男' then 1 else 0 end )
X
Xnzy
把等于女改成不等于男就好了,在我的情况中性别这列有好多值
0
天王盖地虎
天王盖地虎

这种问题实在是没人愿意回答(包括我)

天王盖地虎
天王盖地虎
回复 @Xnzy : 你不就是想要哪些教师教的学生全是男生吗??
X
Xnzy
回复 @天王盖地虎 : 你审清楚题了吗
X
Xnzy
回复 @天王盖地虎 :呵呵
天王盖地虎
天王盖地虎
回复 @Xnzy : 因为太简单
X
Xnzy
为啥
0
东方太阳
东方太阳

select th.name from t_student stu,t_teacher th where stu.teacherid=th.id and stu.sex='男'

X
Xnzy
回复@东方太阳 : 这个是出了有男学生的老师,我的意思是全都是男生
0
佐岸
佐岸

左右关联问题

X
Xnzy
回复@佐岸 :直接关联没实现,不知道怎么排除含有非男生的老师,这个只是个例子,性别这个列可能有多种情况
0
X
Xnzy

这个问题已经实现了,我只想了解有没有直接可以通过一次关联就可以得到的

0
hwumin
hwumin

子查询 not in 应该可以

0
没有脾气的好好先生
没有脾气的好好先生

select t.* from (select a.id,count(1) count ,sum(case b.sex when '1' then 1 else 0 end) mc from js a join xs b on a.id=b.jsid GROUP BY a.id)t
where t.count=t.mc

返回顶部
顶部