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