Как написать SQL запрос, когда 2 поля из первой таблицы ссылаются на вторую таблицу?

Ссылка скопирована
1 ответ

Есть таблица 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, спасибо! исправил
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Павел Админов Ответ

    Для написания 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 запрос позволит нам получить информацию о сотрудниках и их отделах, а также о менеджерах сотрудников и их отделах. Важно помнить, что перед написанием запроса необходимо убедиться, что соответствующие поля в таблицах имеют правильные типы данных и индексы для оптимальной производительности запроса.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно