Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

MySQL циклическое соединение таблиц (одна таблица включается с двух сторон)

Роман Protocol Мыслитель (8562), закрыт 5 лет назад
Всем привет!
Нужно вывести всю информацию по записям (Records) на приём клиентов к исполнителям. Но вопрос в том, как это правильно сделать, если имя, фамилия и прочие данные как для исполнителя, так и для клиента содержатся в одной и той же таблице? То есть SQL сервер не позволит одну и ту же таблицу дважды подсоединить через INNER JOIN. Здесь нужно кольцом соединить.
Как правильно соединить таблицы?
Зелёными стрелками на скрине показано как я хочу соединять таблицы. Не относящиеся к вопросу таблицы скрыты на скрине.
Спасибо за ответы!
Дополнен 5 лет назад
Имя, фамилия и прочие данные как для исполнителя (подтип), так и для клиента (подтип) содержатся в одной и той же таблице -> Users (супертип)
С другой стороны в таблице записей клиент и заказчик прописываются и цепь замыкается.
Лучший ответ
Полосатый жираф Алик Искусственный Интеллект (313002) 5 лет назад
Каждой таблице свой алиас - и для СУБД это уже РАЗНЫЕ таблицы. Во всяком случае, в Oracle именно так.
Роман ProtocolМыслитель (8562) 5 лет назад
Я как то пробовал, аналогичная ситуация была, выдавало "Одна и та же таблица не может быть добавлена в запрос несколько раз".
Вот так в одном запросе не даёт делать:
--Со стороны заказчика
INNER JOIN Users
...
--Со стороны клиента
INNER JOIN Users
Жираф написал про псевдонимы. Где они? Хороший стиль - всегда использовать псевдонимы, даже если они не нужны.
Роман ProtocolМыслитель (8562) 5 лет назад
Спасибо! Работает.
SELECT *
FROM Records r
INNER JOIN Clientele c
ON r.Clientele_idClientele = c.idClientele
INNER JOIN Users uc
ON c.Users_idUsers = uc.idUsers
INNER JOIN Exe_service es
ON r.Exe_service_Executors_idExecutors = es.Executors_idExecutors
INNER JOIN Executors ex
ON es.Executors_idExecutors = ex.idExecutors
INNER JOIN Users ue
ON ex.Users_idUsers = ue.idUsers
Полосатый жираф Алик Искусственный Интеллект (313002) Так зачем бы я это писал... Проверено сотни раз на боевой базе банка!
Остальные ответы
Саня Семенов Оракул (60394) 5 лет назад
к сожалению так как ты хочешь с БД соеденять таблицы не умеет поэтому придется переписать СУБД или сделать костылед процедуру
Похожие вопросы