|
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
|
|||||||||||||||||||||
Объединение запросов07.03.2017, 11:38. Показов 21040. Ответов 14
Метки нет (Все метки)
Здравствуйте.
Имеются несколько запросов к БД:
Офис 1 Офис 2 Офис 3 Офис 4
1 3 5 4
Подскажите пожалуйста, как всё это объединить в один запрос, чтобы в итоге получилась одна таблица с названиями офисов и показателями по ним из примеров выше? Пробовал использовать UNION ALL, но выдало ошибку.
0
|
|||||||||||||||||||||
| 07.03.2017, 11:38 | |
|
Ответы с готовыми решениями:
14
Объединение 2 запросов или 1 запрос Объединение запросов Объединение запросов |
|
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
|
|
| 07.03.2017, 14:53 | |
|
Чтобы связать все эти запросы в одно целое, нужно понимать как между собой связаны все упомянутые таблицы. Нужна модель данных. Того, что написано в разрозненных запросах, недостаточно.
0
|
|
|
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
|
|
| 13.03.2017, 13:57 [ТС] | |
|
grgdvo, из PostgreSQL это можно как-то извлечь?
0
|
|
|
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
|
|
| 13.03.2017, 15:40 [ТС] | |
|
grgdvo, вот, надеюсь, это то, что нужно.
0
|
|
|
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
|
||||||
| 14.03.2017, 15:44 | ||||||
|
Ну не очень диаграмма. Начните вот с этой версии запроса.
0
|
||||||
|
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
|
||||||||||||||||
| 14.03.2017, 17:30 [ТС] | ||||||||||||||||
|
grgdvo,
Не получилось. ОШИБКА: таблица "sp_struct" отсутствует в предложении FROM LINE 18: sp_struct.naz Добавлено через 15 минут По этой ошибке разобрался,
"ОШИБКА: столбец "sp_que.ids" должен фигурировать в предложении GROUP BY или использоваться в агрегатной функции" Добавил в GROUP BY столбец sp_que.ids (GROUP BY sp_struc.naz, sp_que.ids) - после этого запрос сработал, но выдал какие-то нереальные данные, плюс одинаковые во всех столбцах. Плюс, исчез один из офисов. Если поменять местами столбцы (GROUP BY sp_que.ids, sp_struc.naz) - то выходят все офисы, но данные также нереальные и одинаковые. Добавлено через 17 минут Ещё пытался с джойнами сделать, хотя бы первые два запроса, примерно так:
ОШИБКА: в элементе предложения FROM неверная ссылка на таблицу "sp_que" HINT: Таблица "sp_que" присутствует в запросе, но сослаться на неё из этой части запроса нельзя.
0
|
||||||||||||||||
|
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
|
||||||
| 15.03.2017, 05:11 | ||||||
|
JOIN конструкция должна быть "цельной". В подвыражении ON вы не можете использовать другие таблицы кроме тех, которые перечислены слева и справа от JOIN. Запятая не в счет, это уже другой вид соединения других таблиц.
Вся проблема в соединениях связана с тем, что модель связей таблиц четко не прописана. У вас в принципе queue.onpriem висячая таблица, непонятно как она с кем связана. Также по смыслу непонятно, что таблицы обозначают и какая смысловая связь между ними. Если главная сущность sp_struc - офис (больница), в больнице существует одна (может больше) электронная очередь - queue.sp_que, в настоящий момент на приеме есть пациенты из такой-то очереди (может быть нескольких очередей) - queue.onpriem, то вероятно можно запрос так построить
1
|
||||||
|
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
|
|
| 15.03.2017, 08:14 [ТС] | |
|
grgdvo, Так тоже не получилось, ОШИБКА: столбец "sp_que.ids" должен фигурировать в предложении GROUP BY или использоваться в агрегатной функции.
Да, не имея самой базы под рукой, сложно понять... Попробую словами объяснить. isp.sp_struc - это таблица с оргиназациями (оттуда нам нужны только их названия - sp_struc.naz) queue.sp_que - это таблица с электронными очередями (названий организаций тут нет, зато есть ид организаций, к которым привязываются очереди - ids). queue.onpriem - таблица со значениям о тех, кто на приёме queue.que - таблица с текущей очередью queue.stat - статистика (сколько кого было в очередях, на приёме, и т.д.) onpriem.idq, que.idq - номера очередей, они равны sp_que.id Можно конечно сделать модель всей базы данных, там очень много всяких таблиц и зависимостей, но теоретически этих двух должно хватать.
0
|
|
|
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
|
|
| 15.03.2017, 10:13 | |
|
вот как раз для onpriem, que и stat и не хватает описания связующих полей. какие поля в этих таблицах отвечают за связь с электронной очередью???
а с ОШИБКОЙ это я сглупил, копипастил запрос с предыдущего поста и не исправил. Конечно должна быть сортировка по sp_struc.naz, т.е. ORDER BY sp_struc.naz
1
|
|
|
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
|
||||||
| 15.03.2017, 11:19 [ТС] | ||||||
|
grgdvo, да, так получилось. Это мы узнали сколько где на приёме людей. Таким же образом остальные запросы можно присобачить?
sp_que.id = onpriem.idq = que.idq = stat.idq - это все номера электронных очередей, они и связаны между собой. Добавлено через 54 минуты Попробовал вот так:
0
|
||||||
|
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
|
||||||
| 15.03.2017, 15:52 | ||||||
Сообщение было отмечено Prtoy как решение
Решение
1
|
||||||
|
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
|
||||||
| 15.03.2017, 16:03 [ТС] | ||||||
|
grgdvo, спасибо большое. Только чуть-чуть подправил, в 12 строке WHERE sp_que.id = stat.idq и надо было за выбранную дату, с определённым параметром (rez = 1), т.е. 12 строка получилась:
0
|
||||||
|
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
|
|
| 15.03.2017, 16:14 | |
|
COUNT(*) вы просто считаете записи, которые выбрали из таблицы
SUM - суммирует числовые значения. Идея такая. Сначала в подзапросе q1 подсчитываем все количества записей из зависимых таблиц. Если ничего не выбираем из зависимых таблиц, то COUNT(*) насчитает 0. Далее уже аккумулированные данные связываем с таблицей имен и поскольку очередей для каждого офиса потенциально может быть больше одной, то все посчитанные количества надо просуммировать. В итоге получается не самый удачный план запроса, который будет долго выбирать на больших объемах данных. Интуитивно мне кажется можно как-то совместить SUM и OUTER JOIN для всех пяти таблиц в один запрос, чтобы получился оптимальный план запроса, но я уже пас на сегодня работать. Хотите, исследуйте производительность самостоятельно.
0
|
|
|
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
|
|
| 15.03.2017, 16:31 [ТС] | |
|
Спасибо. Срабатывает быстро, таблицы с очередями вряд ли вырастут настолько, чтобы нужно было данный запрос оптимизировать... Сам вряд ли справлюсь, нужно более углублённо изучать SQL, и скорее всего, начинать с нуля
![]() Спасибо ещё раз за помощь.
0
|
|
| 15.03.2017, 16:31 | |
|
Помогаю со студенческими работами здесь
15
объединение запросов
Объединение запросов Объединение 2х запросов в 1 Объединение запросов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|