powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Много запросов в одном и ответ в виде множества записей
5 сообщений из 5, страница 1 из 1
Много запросов в одном и ответ в виде множества записей
    #38869078
vilak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Понравилась конструкция вида :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH 
u AS ( 
SELECT id,param1 FROM product WHERE param1 = 35 
)
, i AS (     
INSERT INTO product (param1, last_update)     
SELECT 35, NULL     
WHERE NOT EXISTS (SELECT 1 FROM u)     
RETURNING id,param1
) 
SELECT id , param1 FROM i 
UNION ALL 
SELECT id , param1 FROM u; 


Она возвращает id,param1 - 1,35.

А можно сделать так, чтобы в одном запросе было много таких запросов и возвращался результат как набор записей :
Код: plsql
1.
2.
3.
4.
1,35
2,37
3,40
...


?

Пробовал вставлять между конструкциями UNION ALL , но выпадает ошибка синтаксиса. Что-то делаю не так.
...
Рейтинг: 0 / 0
Много запросов в одном и ответ в виде множества записей
    #38869398
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vilak,

можно: сначала идут with блоки, потом запрос с union all'ами.

но правильнее делать как-то так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
with t1 as (
select id from (values (35),(37),(42)) t(id)
),
t2 as (
insert into product(param1, last_update) select id, null from t1 where not exists (select 1 from product p where p.id = t1.id) returning id
)

select * from product p where p.id in (select id from t1)



думаю, идея понятна.
...
Рейтинг: 0 / 0
Много запросов в одном и ответ в виде множества записей
    #38869417
?Ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vilakДобрый день,

Понравилась конструкция вида :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH 
u AS ( 
SELECT id,param1 FROM product WHERE param1 IN( 35 ,37,40)
)
, i AS (     
INSERT INTO product (param1, last_update)     
SELECT 35, NULL     
WHERE NOT EXISTS (SELECT 1 FROM u)     
RETURNING id,param1
) 
SELECT id , param1 FROM i 
UNION ALL 
SELECT id , param1 FROM u; 


Она возвращает id,param1 - 1,35.

А можно сделать так, чтобы в одном запросе было много таких запросов и возвращался результат как набор записей :
Код: plsql
1.
2.
3.
4.
1,35
2,37
3,40
...


?

Пробовал вставлять между конструкциями UNION ALL , но выпадает ошибка синтаксиса. Что-то делаю не так.
...
Рейтинг: 0 / 0
Много запросов в одном и ответ в виде множества записей
    #38869431
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexius,

точнее как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t1 as (
select param1 from (values (35),(37),(42)) t(param1)
),
t2 as (
insert into product(param1, last_update) select param1, null from t1 where not exists (select 1 from product p where p.param1 = t1.param1) returning *
)

select id, param1 from product p where p.param1 in (select param1 from t1)
union all
select id, param1 from t2;
...
Рейтинг: 0 / 0
Много запросов в одном и ответ в виде множества записей
    #38869507
vilak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexius,

да, так работает, благодарю.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Много запросов в одном и ответ в виде множества записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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