从包含两个外键数据的表中获取所有数据

时间:2017-05-15 15:59:06

标签: mysql

讲师ID, name, dept_name, salary

学生ID, name, dept_name, tot_cred

顾问s_ID, i_ID,其中包含两个表的学生ID和教师ID。

我需要找到instructor student's的{​​{1}}所有departmentadvisor名称

我可以找到教师和学生的所有内容,因为导师是计算机科学。而且只有学生的名字。

但是不能同时弄清楚这两个名字。

我写了这个:

CComp.Sci

2 个答案:

答案 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