表讲师:ID, name, dept_name, salary
表学生:ID, name, dept_name, tot_cred
表顾问:s_ID, i_ID
,其中包含两个表的学生ID和教师ID。
我需要找到instructor
student's
的{{1}}所有department
和advisor
名称
我可以找到教师和学生的所有内容,因为导师是计算机科学。而且只有学生的名字。
但是不能同时弄清楚这两个名字。
我写了这个:
CComp.Sci
答案 0 :(得分:1)
我认为你需要的根解决方案只是三个表之间的简单连接。但由于您需要一个包含学生和教师姓名的单一列表,因此这会使问题复杂化。一种选择是将查找匹配学生的查询与查找匹配教师的查询结合在一起。
SELECT s.name, 'student' AS type
FROM student s
INNER JOIN advisor a
ON s.ID = a.s_ID
INNER JOIN instructor i
ON a.i_ID = i.ID
WHERE i.dept_name = 'CComp.Sci'
UNION ALL
SELECT DISTINCT i.name, 'instructor'
FROM student s
INNER JOIN advisor a
ON s.ID = a.s_ID
INNER JOIN instructor i
ON a.i_ID = i.ID
WHERE i.dept_name = 'CComp.Sci'
答案 1 :(得分:0)
使用“where ... in(..)”会给你带来不好的表现,也不允许你从where子句中的表中获取数据。
如果您的意思是仅使用学生姓名获得教师姓名方面的结果,那么这是一个解决方案。
SELECT S.name AS Student,I.name AS Instructor
FROM Students AS S
JOIN Advisor AS A ON A.s_ID = S.Id
JOIN Instructor AS I ON I.Id = A.i_ID
WHERE I.dept_name = 'Comp.Sci'
*请注意我使用了别名
**如果你想要让所有学生,甚至那些缺乏教练的学生使用LEFT JOIN