powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Плз. помогите с запросом
11 сообщений из 11, страница 1 из 1
Плз. помогите с запросом
    #35107210
T. Anre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача:
Пусть есть две таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
-------------------------------------------
| aTable                                  |
-------------------------------------------
| aFieldname1 | aFieldname2 | aFieldname3 |
-------------------------------------------
| aValue11    | aValue12    | aValue13    |
-------------------------------------------
| aValue21    | aValue22    | aValue23    |
-------------------------------------------
| aValue31    | aValue32    | aValue33    |
-------------------------------------------

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
-----------------------------
| bTable                    |
-----------------------------
| bFieldname1 | bFieldname2 |
-----------------------------
| bValue11    | bValue12    | 
-----------------------------
| bValue21    | bValue22    | 
-----------------------------


Найти:
Нужен SQL-запрос, который бы позволил бы получить такую выборку:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
-------------------------------------------
| Результат SELECT-запроса                |
-------------------------------------------
| cFieldname1 | cFieldname2 | cFieldname3 |
-------------------------------------------
| aValue11    | aValue12    | aValue13    |
-------------------------------------------
| aValue21    | aValue22    | aValue23    |
-------------------------------------------
| aValue31    | aValue32    | aValue33    |
-------------------------------------------
| bValue11    | bValue12    |             |
-------------------------------------------
| bValue21    | bValue22    |             |
-------------------------------------------

Заранее, спасибо!
...
Рейтинг: 0 / 0
Плз. помогите с запросом
    #35107218
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UNION ALL тебе в помощь:

Код: plaintext
1.
2.
select aFieldname1, aFieldname2,  aFieldname3 from aTable
UNION ALL
select bFieldname1, bFieldname2, null from bTable
...
Рейтинг: 0 / 0
Плз. помогите с запросом
    #35107229
T. Anre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев СергейUNION ALL тебе в помощь:

Код: plaintext
1.
2.
select aFieldname1, aFieldname2,  aFieldname3 from aTable
UNION ALL
select bFieldname1, bFieldname2, null from bTable

Есть ли варианты, которые позволяют обойтись без UNION'а?
...
Рейтинг: 0 / 0
Плз. помогите с запросом
    #35107237
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T. AnreЕсть ли варианты, которые позволяют обойтись без UNION'а?Можно сделть через FULL JOIN, но это будет очень коряво и по производительности гораздо хуже.

А чем UNION ALL не угодил? SET-операторы именно для такого рода запросов и придумывались, если что...
...
Рейтинг: 0 / 0
Плз. помогите с запросом
    #35107250
T. Anre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев СергейА чем UNION ALL не угодил?
В принципе, применение UNION-запроса меня устраивает, но что если в таблицах aTable и bTable по 7 миллионов записей, тогда будет ли решение через UNION наиболее оптимальным?
...
Рейтинг: 0 / 0
Плз. помогите с запросом
    #35107265
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T. Anre Бабичев СергейА чем UNION ALL не угодил?
В принципе, применение UNION-запроса меня устраивает, но что если в таблицах aTable и bTable по 7 миллионов записей, тогда будет ли решение через UNION наиболее оптимальным?Не через UNION, а через UNION ALL.
Если что, то между ними есть небольшая разница. И "чистый" UNION - действительно накладная вещь для сервера, так как он (UNION) производит удаление дубликатов из результирующего набора данных. И если данных в таблицах по 7 миллионов, то операция сортировки и удаления дубликатов может стать для сервера весьма неслабым испытанием. UNION ALL же никакой проверки на дубли не делает и просто тупо клеит к результатам работы одного запроса результата работы другого...
В случае обработки больших множеств он должен дать наибольшую производительность.
...
Рейтинг: 0 / 0
Плз. помогите с запросом
    #35107337
T. Anre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запустил два запроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
    intPKeyFieldA
FROM 
    aTable
UNION ALL
SELECT
    intPKeyFieldB
FROM
    bTable
LIMIT  1  ,  10 

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
    intPKeyFieldA
FROM 
    aTable
UNION
SELECT
    intPKeyFieldB
FROM
    bTable
LIMIT  1  ,  10 

Первый запрос генерится за 8 секунд, второй за 471 секунд.

Как сделать так, чтобы сократить время генерации до ~1 секунды?
...
Рейтинг: 0 / 0
Плз. помогите с запросом
    #35107367
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тебе нужно из обоих таблиц всего 10 строк вывести? Или в каких целях там LIMIT используется?
...
Рейтинг: 0 / 0
Плз. помогите с запросом
    #35107461
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T. AnreПервый запрос генерится за 8 секунд, второй за 471 секунд.покажите explain analyze

T. AnreКак сделать так, чтобы сократить время генерации до ~1 секунды?запроса union или union all?

PS: limit без order by - ошибка
...
Рейтинг: 0 / 0
Плз. помогите с запросом
    #35107582
T. Anre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев СергейА тебе нужно из обоих таблиц всего 10 строк вывести?
Это определено в конфиге приложения.

Бабичев СергейИли в каких целях там LIMIT используется?
Лимит используется для постраничного вывода.
...
Рейтинг: 0 / 0
Плз. помогите с запросом
    #35107596
T. Anre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat T. AnreПервый запрос генерится за 8 секунд, второй за 471 секунд.покажите explain analyze

T. AnreКак сделать так, чтобы сократить время генерации до ~1 секунды?запроса union или union all?

PS: limit без order by - ошибка
Таблицы милионники находятся в mySQL. Сейчас, сгенерирую таблицы под Postgre.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Плз. помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]