MySQL запрос, возвращающий те же поля, ссылающиеся на 2 разных внешних ключа - PullRequest
0 голосов
/ 11 марта 2012

довольно сложный вопрос к слову, но вот таблицы:

* СТУДЕНТ

ID рк

ASSIGNED_ADVISOR_ID fk ref (DEP_FACULTY.ID)

Fname

LNAME

* DEP_FACULTY

ID

Fname

LNAME

* ADVISE_HIST

student_id

ACTUAL_ADVISOR_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, но на этот раз ссылаться на советник ACTUAL?

Или мне нужно добавить избыточность к ADVISE_HIST (ADVISE_HIST.DEP_FACULTY_LNAME и ADVISE_HIST.DEP_FACULTY_FNAME), чтобы правильно вернуть эту информацию?

1 Ответ

1 голос
/ 11 марта 2012
select
 CONCAT(STUDENT.LNAME,', ',STUDENT.FNAME), 
 CONCAT(DEP_FACULTY.LNAME,', ',DEP_FACULTY.FNAME) as `ASSIGNED ADVISOR`,
 CONCAT(ACTUAL.LNAME, ', ', ACTUAL.FNAME) AS `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
  /* JOIN again between DEP_FACULTY and ADVISE_HIST with an alias */
  LEFT JOIN DEP_FACULTY AS ACTUAL ON ADVISE_HIST.ACTUAL_ADVISOR_ID = ACTUAL.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...