Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
2 / 2 / 0
Регистрация: 15.03.2009
Сообщений: 15

Как красиво вывести объединение нескольких таблиц

05.06.2017, 09:53. Показов 2820. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пример. 3 таблицы: факультеты, кафедры, группы. Связь у таблиц 1 ко многим соответственно. Все наименования уникальны.

Связываем left join'ом все таблицы, выводя всю информацию по факультетам, кафедрам в них и группам на этих кафедрах:

Code
1
2
3
4
5
6
7
8
Факультет 1| Кафедра 1| Группа 1
Факультет 1| Кафедра 1| Группа 2
Факультет 1| Кафедра 1| Группа 3
Факультет 1| Кафедра 2| Группа 4
Факультет 1| Кафедра 2| Группа 5
Факультет 2| Кафедра 3| Группа 6
Факультет 2| Кафедра 4| Группа 7
Факультет 2| Кафедра 5| Группа 8
Не очень так читаемо, хочется, чтобы выводилось так:

Code
1
2
3
4
5
6
7
8
Факультет 1| Кафедра 1| Группа 1
           |          | Группа 2
           |          | Группа 3
           | Кафедра 2| Группа 4
           |          | Группа 5
Факультет 2| Кафедра 3| Группа 6
           | Кафедра 4| Группа 7
           | Кафедра 5| Группа 8
То есть, мне надо заменить дубликаты на пустые строки, чтобы они не мешали чтению. Уже даже придумал принцип, по которому можно сделать это, но не могу реализовать. Можно было бы сделать при помощи UNION где в одном запросе указать limit 1 с непустой колонкой, а во второй OFFSET 1 с пустыми. И вместо left join это всё сделать с GROUP by но не могу составить такой запрос.. Помогите пожалуйста. Может кто знает другие решения.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.06.2017, 09:53
Ответы с готовыми решениями:

Объединение нескольких таблиц
Доброго всем дня! Есть несколько таблиц с разным набором данных, например: Лицо (фамилия,имя ,отчество); Адрес (Город, улица, дом,...

Объединение нескольких таблиц
Доброго времени суток, товарищи. Помогите разобраться с БД. Необходимо создать объединение нескольких таблиц(результатом должна быть...

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

4
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
06.06.2017, 13:11
Цитата Сообщение от King Master Посмотреть сообщение
Можно было бы сделать при помощи UNION где в одном запросе указать limit 1 с непустой колонкой, а во второй OFFSET 1 с пустыми. И вместо left join это всё сделать с GROUP by но не могу составить такой запрос..
Простите, но логика ну совсем не улавливается.
Вообще такое лучше делать на клиенте, SQL для таких фокусов плохо предназначен, а сидеть и изгаляться неохота.
0
2 / 2 / 0
Регистрация: 15.03.2009
Сообщений: 15
06.06.2017, 23:08  [ТС]
Простите, но логика ну совсем не улавливается.
Code
1
2
3
select fak, kaf from table limit 1
union 
select ' ', kaf from table offset 1
Только вот с несколькими таблицами и через конструкцию GROUP BY, чтобы работало как хочу, не могу набросать...
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
07.06.2017, 09:32
Лучший ответ Сообщение было отмечено King Master как решение

Решение

это правда MS SQL, но у Postgres синтаксис такой же вроде
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT 
  case frn when 1 then FaсultyName else '' end DisplayFaсultyName,
  case drn when 1 then DepartmentName else '' end DisplayDepartmentName,
  GroupName, FaсultyName, DepartmentName
FROM (  
 
SELECT FaсultyName, DepartmentName, GroupName, 
    RANK() OVER (PARTITION BY FaсultyName ORDER BY FaсultyName, DepartmentName, GroupName) frn, 
    RANK() OVER (PARTITION BY FaсultyName, DepartmentName ORDER BY FaсultyName, DepartmentName, GroupName) drn 
FROM (
SELECT 'Факультет 1' FakultyName, 'Кафедра 1' DepartmentName,  'Группа 1' GroupName UNION
SELECT 'Факультет 1',  'Кафедра 1', 'Группа 2' UNION
SELECT 'Факультет 1',  'Кафедра 1', 'Группа 3' UNION
SELECT 'Факультет 1',  'Кафедра 2', 'Группа 4' UNION
SELECT 'Факультет 1',  'Кафедра 2', 'Группа 5' UNION
SELECT 'Факультет 2',  'Кафедра 3', 'Группа 6' UNION
SELECT 'Факультет 2',  'Кафедра 4', 'Группа 7' UNION
SELECT 'Факультет 2',  'Кафедра 5', 'Группа 8' 
) t
) l
ORDER BY FaсultyName, DepartmentName, GroupName
Факультет 1Кафедра 1Группа 1Факультет 1Кафедра 1
  Группа 2Факультет 1Кафедра 1
  Группа 3Факультет 1Кафедра 1
 Кафедра 2Группа 4Факультет 1Кафедра 2
  Группа 5Факультет 1Кафедра 2
Факультет 2Кафедра 3Группа 6Факультет 2Кафедра 3
 Кафедра 4Группа 7Факультет 2Кафедра 4
 Кафедра 5Группа 8Факультет 2Кафедра 5
1
2 / 2 / 0
Регистрация: 15.03.2009
Сообщений: 15
08.06.2017, 10:56  [ТС]
YuryK, спасибо большое)
За RANK и OVER, многое узнал))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.06.2017, 10:56
Помогаю со студенческими работами здесь

Объединение нескольких таблиц в одну
вот есть 5 таблиц test_1,test_2.....5 , у них всего два поля id(autoincrement) и word(varchar(50)) и есть таблица test тоже с такими же...

Объединение нескольких таблиц в одну
Добрый день! Excel'ем приходится пользоваться нечасто, поэтому прошу не пинать :) Суть задачи: Есть несколько таблиц с...

Объединение таблиц с выбором нескольких данных по id
Здравствуйте, Уважаемые форумчане) Возник вопрос в связи с расширением списка хранящихся данных по сотрудникам. Есть 2 таблицы: ...

Объединение записей из нескольких таблиц. Представление.
Доброго времени суток!.. Есть таблицы со след. структурой: Я хочу объединить записи, например, с 2ух таблиц: soborka,...

Объединение нескольких разных таблиц в одну
Добрый день! Помогите пожалуйста с таблицей. Имеется несколько таблиц с разным кол-вом столбцов. Все они связаны с одной таблицей. ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru