powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Несколько With AS в одном запросе
3 сообщений из 3, страница 1 из 1
Несколько With AS в одном запросе
    #39878092
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И снова я прошу помощи у знатоков, т.к. своих воображения и знаний не хватает. Имеются 4 таблицы, где хранится значение и id этого значения и одна общая таблица, где связаны в уникальную цепочку эти 4 id, изначально необходимые данные вставлялись в эти таблицы в цикле, но с ростом нагрузки, процесс стал очень медленным, соответственно, хочу работать со вставкой разом всех записей, которые беру из другой таблицы. Логика такова, что все значения в каждой таблице, кроме общей, уникальны и при вставке я либо вставляю это значение и получаю id, либо просто получаю id, если оно есть:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with s as (
    select id
    from tag
    where value = 'value1'
), i as (
    insert into tag ("value")
    select 'value1'
    where not exists (select 1 from s)
    returning id
)
select id
from i
union all
select id
from s


но как объединить все 4 этих процесса и получить общий id из общей таблицы? Пробовал объединить их с помощью With As, но получил ошибку
Код: sql
1.
WITH clause containing a data-modifying statement must be at the top level
...
Рейтинг: 0 / 0
Несколько With AS в одном запросе
    #39878651
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IvanCно как объединить все 4 этих процесса и получить общий id из общей таблицы?
CTE обычно используют для селектов, а в вашем случае со вставкой рекомендую сделать хранимую процедуру
...
Рейтинг: 0 / 0
Несколько With AS в одном запросе
    #39878725
jan2ary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSKaluginIvanCно как объединить все 4 этих процесса и получить общий id из общей таблицы?
CTE обычно используют для селектов, а в вашем случае со вставкой рекомендую сделать хранимую процедуруТа можно и инсерт, только ограничение WITH clause containing a data-modifying statement must be at the top level действительно есть и документировано.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Несколько With AS в одном запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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