【发布时间】:2020-10-11 06:11:51
【问题描述】:
编写一个 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'
【问题讨论】:
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。
-
您使用的连接语法在 1992 年的标准 SQL 中变得多余。那是在 MySQL 发明之前!如果您正在上课或使用一本书或教程教您使用这种古老的语法,您应该退出它。请改用正确的显式连接(
INNER JOIN、LEFT OUTER JOIN等)。
标签: mysql sql join select relational-division