编写一个sql查询,以选择参加过“john”教授所有讲座但没有参加“joseph”教授任何讲座的学生的姓名。
我写了这个问题,但它是给我的学生谁是谁从约瑟夫讲座的名字也。
select distinct s.studentname
from Student s,Attendance a,Lecture l
where s.StudentId=a.studid
and l.lecId = a.lectureid
and l.professor='JOHN'
and l.professor != 'JOSEPH';
我在上面的查询中犯了一些错误,但无法识别相同的错误。
这是表格结构
学生桌
# StudentId, StudentName, Sex
'1', 'AMY', 'M'
'2', 'JACK', 'M'
'3', 'TONY', 'M'
'4', 'TARA', 'M'
'5', 'SARAH', 'F'
'6', 'TOM', 'F'
讲台
# LecId, Subject, Professor
1, MATH, JOHN
2, MATH, JOSEPH
3, PHY, MARK
4, PHY, MAX
5, PHY, JOHN
6, CHEM, JOHN
7, CHEM, JOSEPH
8, HISTORY, JOSEPH
考勤表
# StudId, LectureId
'1', '1'
'1', '2'
'3', '1'
'2', '5'
'2', '6'
'3', '4'
'1', '6'
'4', '5'
'5', '1'
'5', '2'
'1', '3'
'1', '4'
'1', '5'
'1', '6'
5条答案
按热度按时间gpfsuwkq1#
您需要查看属于给定学生的所有行,因此
where
子句不能做你想做的事。相反,您可以将聚合和文件管理器与having
条款:如果你想让老师们把约翰的课都加上,而不是约瑟夫的课,那么:
e5nqia272#
如果您的mysql版本支持组\u concat,您可以尝试下面的脚本-
此处演示
上面的查询将返回仅从“john”学习课程的学生列表。没有其他人。
但如果您的要求更改为在列表中添加更多教授,则可以在having子句检查中相应地添加教授姓名。但你需要在这个案子上申请一个合适的排序。
p4rjhz4m3#
尝试:
6pp0gazn4#
采访中提问(makemytrip)
r8uurelv5#
我重新措辞了你的加入。。。但似乎奏效了。
此查询是否返回您要查找的数据集?