Объединение трёх таблиц - MySQL
Формулировка задачи:
Здравствуйте.
Прошу помочь или просто пнуть, в какую сторону читать.
Есть 3 таблицы Switching_node, Switchs и UPS. Полностью приводить их смысла нет, приведу только то, участвует в запросе:
Коротко - Switching_node - список коммуташек, Switchs - свичи, UPS - ибп. В таблицах Switchs и UPS поле KU определяет принадлежность к коммуташке. Нужно получить сводную по коммуташке. Делаю:
Вывод:
Значений в таблицах конечно же больше и выборка по условиям в общем-то работает. Но как мне избавиться от декартова произведения(насколько я понимаю, именно оно здесь). Видеть же я хотел бы вот такой результат:
В идеале, конечно KU_Name должно быть объединённой ячейкой, но это не принципиально.
Switching_node
id | KU_Name |
1 | КУ57-4 |
Switchs
id | Name | KU |
1 | A57-2-1 | КУ57-4 |
2 | A57-2-4 | КУ57-4 |
UPS
id | Inv_Number | KU |
1 | UPS/001 | КУ57-4 |
2 | UPS/002 | КУ57-4 |
SELECT Switching_node.KU_Name, Switchs.Name, UPS.Inv_Nuber FROM Switching_node JOIN Switchs ON Switching_node.KU_Name=Switchs.KU JOIN UPS ON Switching_node.KU_Name=UPS.KU
KU_Name | Name | Inv_Nuber |
КУ57-4 | A57-2-1 | UPS/001 |
КУ57-4 | A57-2-4 | UPS/001 |
КУ57-4 | A57-2-1 | UPS/002 |
КУ57-4 | A57-2-4 | UPS/002 |
KU_Name | Name | Inv_Nuber |
КУ57-4 | A57-2-1 | UPS/001 |
КУ57-4 | A57-2-4 | UPS/002 |
Решение задачи: «Объединение трёх таблиц»
textual
Листинг программы
SELECT val.KU_name, GROUP_CONCAT(DISTINCT val.Inv_number), GROUP_CONCAT(DISTINCT e.name) FROM Switchs e JOIN (SELECT q.id, q.KU_name, w.Inv_number FROM Switching_node q JOIN UPS w ON q.KU_name=w.KU) val ON e.KU=val.KU_name GROUP BY val.KU_name
Объяснение кода листинга программы
- В этом коде объединяются три таблицы: «Switchs», «Switching_node» и «UPS».
- Для этого используется оператор JOIN.
- В первом JOIN-соединении выбираются поля «id» и «KU_name» из таблицы «Switching_node», а также поле «Inv_number» из таблицы «UPS» на основе условия «q.KU_name=w.KU».
- Полученные результаты привязываются к таблице «Switchs» с помощью оператора JOIN по полю «KU».
- В итоговом запросе выбираются поля «val.KU_name», «GROUP_CONCAT(DISTINCT val.Inv_number)» и «GROUP_CONCAT(DISTINCT e.name)» из полученных результатов.
- Для получения уникальных номеров устройств в поле «Inv_number» используется функция DISTINCT.
- С помощью функции GROUP_CONCAT формируются строки из значений, которые будут соединены в одну строку.
- В итоговой строке каждая группа строк будет отделена символом «;».
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д