今日又发现网上一个题目有问题,不过由于最近太多面试题搞得我焦头烂额,又不敢确定,但为了科学的严谨性,

为管理岗位业务培训信息,建立3个表:
S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (C#,CN ) C#,CN 分别代表课程编号、课程名称
SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩
4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
网上流行的答案:
SELECT SN,SD FROM S
WHERE [S#] IN(
SELECT [S#] FROM SC
RIGHT JOIN
C ON SC.[C#]=C.[C#] GROUP BY [S#]
HAVING COUNT(*)=COUNT([S#]))
以上代码是错误的, 关键是对Right join 的错误理解,正确方法(经过调试如下):
SELECT SN, SD FROM S
WHERE S#
IN (SELECT SC.S#
FROM SC,C
where SC.C# = C.C#
GROUP BY SC.S#
HAVING COUNT(distinct(SC.C#))
= ( select count(*) from C ) )
由此可以给大家一个提示,看这些所谓的答案一定要多加思考,不要过于相信。 网上是不会有标准答案的。