按理说应该一样啊,为什么第一段代码输出的为一行呢
/*32.成绩有重复的情况下,查询选修张衡老师所授课程的学生中,
成绩最高的学生信息及其成绩:
*/
SELECT s.*,g.cid,g.score
FROM student s LEFT JOIN grade g USING(sid)
WHERE g.cid IN(
SELECT cid FROM course WHERE tid IN
(SELECT tid FROM teacher WHERE tname='张衡'))
HAVING g.score=MAX(score);
#答案
SELECT s.*,g.cid,g.score
FROM student s LEFT JOIN grade g USING(sid)
WHERE g.cid IN(
SELECT cid FROM course WHERE tid IN
(SELECT tid FROM teacher WHERE tname='张衡'))
HAVING g.score=(SELECT MAX(score) FROM grade WHERE cid = (SELECT cid FROM course WHERE tid =
(SELECT tid FROM teacher WHERE tname = '张衡')));
第一段代码运行结果
sid sname sbirth sgender cid score
01 赵雷 1990-01-01 00:00:00 男 02 90.0
第二段运行结果
sid sname sbirth sgender cid score
01 赵雷 1990-01-01 00:00:00 男 02 90.0
10 李四 2017-12-16 00:00:00 女 02 90.0
sid cid score
01 01 80.0
01 02 90.0
10 01 88.0
10 02 90.0
这是得分表数据,他们不管是所有成绩,还是02成绩都是90