0
样的一个难以回答的话,但这里是表:MySQL查询返回相同的字段引用2个不同的外键
* 学生
ID PK
ASSIGNED_ADVISOR_ID FK REF(DEP_FACULTY .ID)
FNAME
LNAME
* DEP_FACULTY
ID
FNAME
LNAME
* ADVISE_HIST
student_id数据
ACTUAL_ADVIS OR_ID FK REF(DEP_FACULTY.ID)
继承人的问题:
学生可以通过比其他教员被告知他们的ASSIGNED_ADVISOR_ID
(这是ACTUAL_ADVISOR_ID
),我需要一个查询,连接这些3个表,这将返回一个学生姓名,分配的顾问名称和实际的顾问名称(除其他事项外,我不会列出)。
我的查询到目前为止:
select
CONCAT(STUDENT.LNAME,', ',STUDENT.FNAME),
CONCAT(DEP_FACULTY.LNAME,', ',DEP_FACULTY.FNAME) as "ASSIGNED ADVISOR",
***need a field here for actual advisor***
from
STUDENT
join DEP_FACULTY on STUDENT.ASSIGNED_ADVISOR_ID=DEP_FACULTY.ID
left join ADVISE_HIST on STUDENT.ID=ADVISE_HIST.STUDENT_ID;
有什么办法来显示DEP_FACULTY.LNAME
和FNAME
了,但引用实际的顾问这个时间呢?
或者是否需要添加冗余到ADVISE_HIST
(ADVISE_HIST.DEP_FACULTY_LNAME
和ADVISE_HIST.DEP_FACULTY_FNAME
)以正确返回此信息?
只有它可能应该是左加入。 – 2012-03-11 03:53:49
@AndriyM不确定没有测试 - 因为它是'STUDENT'和'ADVISE_HIST'之间的一个LEFT JOIN,应该已经被处理了。 – 2012-03-11 03:56:00
是的,因为左边没有建议历史记录的学生可以返回,但是使用内部连接,他们将被丢弃,因为您的连接会尝试将NULL ACTUAL_ADVISOR_ID与ACTUAL.ID匹配并失败。 – 2012-03-11 04:03:34