日期:2014-05-16  浏览次数:20462 次

一道有关多表联合查询的面试题
    进入大三,学校搞了一个校企联合的实验班,打算招40个人今天早上去面试。
     面试我的听说是这家软件公司的副总经理(女的),面试过程简简单单,聊了
一些家常,谈了我这两年来的学习与未来的打算。之后让我去下一位面试官处写编程
题。
     首先,他先问我学过数据库没有,我说只学过一点点,在做java开发的小博客的
时候用到什么学什么的。他说基本的语句应该会吧。我说还可以。然后他就给了我一道
题目让我写。大概题目是这个样子。

三个表:
students表
    id,
    name
subjects表
     id,
    java,
    math
scores表
     stu_id,
    sub_id,
    score
对这单个表写一条查询语句,要求:查出这三个表的信息,当学生缺考的时候,scores表中是没有记录存在的,但是查询的结果要求缺考的同学的信息也要现实出来。
     对于只会一点点数据库操作的皮毛的我当场没有做出来,他问了问我的思想,我就按照我的想法大概说了一遍,他说在乎语法的东西,我们要的只是思想。我是只说了个用联合查询。其他的就不知道了。面试也就这样结束。有点悲剧。
     下午回来,我发誓一定要吧这个题目搞定,找了一下书,没什么头绪,上网google一下,
这是上网找到的修改而来的方案
SELECT name, subject, score from (scores RIGHT JOIN students on scores.stu_id=students.id) LEFT JOIN subjects on scores.sub_id=subjects.id

SELECT name, subject, score from scores sc left outer join subjects su on sc.sub_id=su.id right outer join students st on st.id=sc.stu_id

也没有找到什么好的解决方案。正当要放弃的时候(因为这个逃了一下无的课,弄了一下午),突发奇想(就是猜,心想这反正错了那么多次,再错一次也无妨),把上面的句子做了一下变形:
SELECT name, subject,score from (students, subjects) left join scores on scores.stu_id=students.id and scores.sub_id=subjects.id

没想到的时这样问题居然解决了(本人数据库基本没学,基础太差,所以不知道from后面的表还可以用括号括起来,也不知道join子句可以用and连接),真的是功夫不负有心人纳。。。。到此结束。

1 楼 jhli502 2011-10-29  
SELECT name, subject,score from (students, subjects) left join scores on scores.stu_id=students.id and scores.sub_id=subjects.id
你确定这语句是正确的吗
2 楼 zeng1990 2011-10-30  
我试过,应该没什么问题。
3 楼 jhli502 2011-10-31  
看我试了 为什么一执行就报错了