Форум программистов, компьютерный форум, киберфорум
Наши страницы
MySQL
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Avvadon85
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 11
1

Объединение трёх таблиц

15.06.2016, 22:32. Просмотров 1089. Ответов 21
Метки нет (Все метки)

Здравствуйте.
Прошу помочь или просто пнуть, в какую сторону читать.
Есть 3 таблицы Switching_node, Switchs и UPS. Полностью приводить их смысла нет, приведу только то, участвует в запросе:
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

Коротко - Switching_node - список коммуташек, Switchs - свичи, UPS - ибп. В таблицах Switchs и UPS поле KU определяет принадлежность к коммуташке. Нужно получить сводную по коммуташке. Делаю:
MySQL
1
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
В идеале, конечно KU_Name должно быть объединённой ячейкой, но это не принципиально.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2016, 22:32
Ответы с готовыми решениями:

Объединение трёх запросов в один
У меня есть 3 запроса и в них код очень похож, Можно ли сделать из них 1...

Соединение трёх таблиц
Друзья, помогите пожалуйста сделать запрос для выборки информации из БД в...

Вложеные за просы из трёх таблиц
Народ подскажите, как вытащить из третей таблицы 3 (rubric) вытащить поле...

Объединение таблиц
SELECT * FROM `page` INNER JOIN `site` ON 'page'.'site'='site'.'id'; даёт гогу:...

Объединение таблиц
Здравствуйте, не могу связать правильно таблицы. Суть такова: Пользователь,...

21
DenMagor
43 / 39 / 13
Регистрация: 08.05.2016
Сообщений: 167
22.06.2016, 16:14 21
Лучший ответ Сообщение было отмечено Avvadon85 как решение

Решение

Цитата Сообщение от Avvadon85 Посмотреть сообщение
При изменении их местоположения будет сложно отслеживать правильность заполнения дополнительного столбца.
Ну да будет проблематично.
А с переменными я представляю что-то подобное дополнительному столбцу, по ходу объединения строки будут нумероваться так же как предлагал в дополнительном столбце.
Примерно так:
SQL
1
2
3
4
5
6
7
8
9
SET @val := 1, @sents := '', @val1 := 1, @sents1 := '';
 
SELECT tab1.KU, tab1.Name, tab.Inv_Number FROM
(SELECT *, IF(Switchs.KU = @sents, @val := @val+1, (@sents :=Switchs.KU) OR @val := 1) AS t FROM
(SELECT * FROM Switchs
 ORDER BY KU) AS Switchs) AS tab1 LEFT JOIN
(SELECT *, IF(UPS.KU = @sents1, @val1 := @val1+1, (@sents1 :=UPS.KU) OR @val1 := 1) AS t2 FROM
(SELECT * FROM UPS 
ORDER BY KU) AS UPS) AS tab ON tab.KU = tab1.KU AND t = t2;
Очень громоздкий пример и только для одного (левого) объединения, наверное такой запрос лучше не использовать, но должен работать, но возможны и не ожиданные результаты (тут на форуме мне дали ссылку на статью с возможными проблемами использования условий и переменных). И это повторю только моё решение.
1
Avvadon85
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 11
22.06.2016, 17:01  [ТС] 22
Великолепно.
Запрос отлично работает. Даже выводит КУ с нулевым значением UPS. Предсказуемо отрезает строки в Switchs, если их больше, чем UPS. Но думаю, что два left join с объединением исправят ситуацию.
Правда теперь я осознал, что громоздким будет не только запрос, но и сам вывод. Поэтому в работу наверно возьму всё-таки ваш первый совет с выводом результатов в строчку. А подробности на отдельной страничке будут по запросу конкретной КУ с выводом каждой таблицы отдельными запросами.
Тем не менее мой первоначальный запрос реализован полностью. Для КУ57-4 я получил 2 строчки вместо 4. Ради спортивного интереса, как время будет, я попробую доделать ваш запрос, чтобы он не выкидывал никаких строк. Но использовать его действительно стоит только тогда, когда другого способа выйти из ситуации просто нет.
0
Миниатюры
Объединение трёх таблиц  
22.06.2016, 17:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2016, 17:01

Объединение таблиц
Помогите пожалуйста, никак не могу разобраться. Существуют таблицы например...

Объединение таблиц
Как объединить все таблицы которые начинаются на какой то символ? Ну к примеру...

Объединение таблиц
Все привет! Необходимо объединить две талицы, у таблиц совпадают поля id, мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru