Как соединить два запроса, в каждом из которых, свои JOIN? - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, специалисты! Есть запрос к таблице водителей некоторой фырмы:
SELECT d.*, rw.name AS `rwname`
FROM DRIVERS_TABLE d
LEFT JOIN RW_TABLE rw ON (d.`rw`=rw.`id`) 
WHERE d.`firm`=1
В числе прочих полей из этого запроса получаем поле car. Также имеется запрос к таблице автомобилей, подтягивающий автомобиль к водителю:
SELECT c.*, mark.`value` AS markname
FROM CARS_TABLE c
LEFT JOIN HLP_TABLE mark ON (c.`mark`=mark.`id`) 
WHERE c.`id`=поле_car_из_предыдущего_запроса
Как влепить JOIN от первого запроса ко второму, т.е. выбрать всех водителей, причём для тех, у кого есть автомобиль, ещё и данные про авто? Пробовал так:
SELECT d.*, c.*, rw.name AS `rwname`, mark.`value` AS `markname`
FROM DRIVERS_TABLE d
LEFT JOIN RW_TABLE rw ON (d.`rw`=rw.`id`),
CARS_TABLE c 
LEFT JOIN HLP_TABLE mark ON (c.`mark`=mark.`id`) 
WHERE d.`firm`=1 AND c.`id`=d.`car`
Получаю всё, что нужно, но только для тех водителей, к которым привязана машина. А надо выбрать всех.

Решение задачи: «Как соединить два запроса, в каждом из которых, свои JOIN?»

textual
Листинг программы
SELECT d.*, c.*, rw.name AS `rwname`, mark.`value` AS `markname`
FROM DRIVERS_TABLE d
LEFT JOIN RW_TABLE rw ON (d.`rw`=rw.`id`)
LEFT JOIN CARS_TABLE c ON (c.`id`=d.`car`)
LEFT JOIN HLP_TABLE mark ON (c.`mark`=mark.`id`) 
WHERE d.`firm`=1

Объяснение кода листинга программы

  1. SELECT - выборка данных из указанных таблиц
  2. d., c., rw.name AS rwname, mark.value AS markname - список выбираемых столбцов
  3. FROM - указание источника данных
  4. DRIVERS_TABLE - название таблицы, из которой производится выборка
  5. LEFT JOIN - метод объединения таблиц
  6. RW_TABLE - название таблицы, с которой производится объединение
  7. ON - условие объединения таблиц
  8. d.rw=rw.id - условие объединения по указанному столбцу
  9. LEFT JOIN - метод объединения таблиц
  10. CARS_TABLE - название таблицы, с которой производится объединение
  11. ON - условие объединения таблиц
  12. c.id=d.car - условие объединения по указанному столбцу
  13. LEFT JOIN - метод объединения таблиц
  14. HLP_TABLE - название таблицы, с которой производится объединение
  15. ON - условие объединения таблиц
  16. c.mark=mark.id - условие объединения по указанному столбцу
  17. WHERE - условие выборки данных
  18. d.firm=1 - условие выборки по указанному столбцу
  19. ; - конец запроса
    • все символы и названия таблиц и столбцов выделены кавычками для предотвращения ошибок при написании запроса

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы