最近想找工作,于是开始恶补基础知识,记得网上有位先生开过一句玩笑:“打字快了,却发现自己忘了键盘布局了;经验多了,却发现自己不会做题了”,确实有这种感触,好多面试题都能把我问的一愣一愣的。 要是google能随身携带该多好! 呵呵
今日又发现网上一个题目有问题,不过由于最近太多面试题搞得我焦头烂额,又不敢确定,但为了科学的严谨性,,只能前辛万苦下了一个sql2000过来自己测试。 才发现,果然,自己的方法才是对的,网上的所谓答案简直就是误人子弟。 后来一搜索,才知道,原来已经有人发现了。。 题目如下:
为管理岗位业务培训信息,建立3个表:
S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (C#,CN ) C#,CN 分别代表课程编号、课程名称
SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩
今日又发现网上一个题目有问题,不过由于最近太多面试题搞得我焦头烂额,又不敢确定,但为了科学的严谨性,,只能前辛万苦下了一个sql2000过来自己测试。 才发现,果然,自己的方法才是对的,网上的所谓答案简直就是误人子弟。 后来一搜索,才知道,原来已经有人发现了。。 题目如下:
为管理岗位业务培训信息,建立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 ) )
由此可以给大家一个提示,看这些所谓的答案一定要多加思考,不要过于相信。 网上是不会有标准答案的。