Как написать SQL запрос, когда 2 поля из первой таблицы ссылаются на вторую таблицу?
Есть таблица users
- id
- name (имя)
Есть таблица events
- id
- name (название события)
- user_id (id менеджера)
- executor_id (id организатора)
Поля user_id и executor_id из events ссылаются на поле id в users
Хочу, чтобы вывод был таким:
название события, имя менеджера, имя организатора
Не могу понять, как правильно построить SQL запрос. Знаю, как выводить имя менеджера или имя организатора, а вот чтобы и то и другое вместе не получается.
Вот так не работает:
select `events`.`name`, `users`.`user_id `.`name`, `users`.`executor_id`.`name` from `events` left join `users` on (`events`.`executor_id` = `users`.`id`) and (`events`.`user_id` = `users`.`id`) |
select `events`.`name`, `users`.`user_id `.`name`, `users`.`executor_id`.`name` from `events` left join `users` on (`events`.`executor_id` = `users`.`id`) and (`events`.`user_id` = `users`.`id`)
Как написать запрос правильно?
Дополнительно:
При небольшой таблице пользователей и куче запросов к событиям проще и быстрее сделать простой запрос, выбрав всех пользователей, и использовать их имена их ближе к выводу, не мучая зря базу.
Разделение запросов позволяет один раз запросить из базы ФИО, передать их на фронт и потом иметь эти данные под рукой там, где они понадобятся, без повторных запросов.
Например, на той же странице может быть форма фильтрации событий с селектором, для которого все равно нужен тот же список ФИО всех пользователей...
select `events`.`name`, `users`.`name` as `user_name`, `executors`.`name` as `executor_name` from `events` left join `users` `executors` on `events`.`executor_id` = `executors `.`id` left join `users` on `events`.`user_id` = `users`.`id` |
select `events`.`name`, `users`.`name` as `user_name`, `executors`.`name` as `executor_name` from `events` left join `users` `executors` on `events`.`executor_id` = `executors `.`id` left join `users` on `events`.`user_id` = `users`.`id`
- Спасибо, ваш ответ помог. В коде была небольшая опечатка.
Вместо `users`.`id` в этой строке:
left join `users` `executors` on `events`.`executor_id` = `users`.`id`
left join `users` `executors` on `events`.`executor_id` = `users`.`id`
Надо использовать `executors`.`id`:
left join `users` `executors` on `events`.`executor_id` = `executors`.`id`
left join `users` `executors` on `events`.`executor_id` = `executors`.`id`
- alexzen, спасибо! исправил
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для написания SQL запроса, когда 2 поля из первой таблицы ссылаются на вторую таблицу, необходимо использовать оператор JOIN для объединения таблиц по соответствующим полям. Для примера, давайте представим, что у нас есть две таблицы: "employees" и "departments", где в таблице "employees" есть два поля "department_id" и "manager_id", которые ссылаются на поле "department_id" в таблице "departments".
Пример SQL запроса:
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
JOIN departments ON employees.department_id = departments.department_id
JOIN departments ON employees.manager_id = departments.department_id;
В данном запросе мы используем оператор JOIN дважды, чтобы объединить таблицу "employees" с таблицей "departments" дважды, ссылаясь на соответствующие поля "department_id" и "manager_id". Мы выбираем поля "employee_id" и "employee_name" из таблицы "employees" и поле "department_name" из таблицы "departments".
Таким образом, данный SQL запрос позволит нам получить информацию о сотрудниках и их отделах, а также о менеджерах сотрудников и их отделах. Важно помнить, что перед написанием запроса необходимо убедиться, что соответствующие поля в таблицах имеют правильные типы данных и индексы для оптимальной производительности запроса.