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


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