#postgresql #common-table-expression
#postgresql #common-table-expression
Вопрос:
Я хочу использовать временную таблицу после;с предложением PostgreSQL внутри функции. Я получаю ошибку синтаксической ошибки при или рядом с «создать».
это код
with counts as(
select
(
select count(cte."Id") from cte
left join "Medication" m3 on m3."Id" = cte."Id" and m3."AlfId" = any(_alfids::int[])
where public."CheckMedicationStatus"(m3, '{Active}') = true and cte."ResidentId" = ri."ResidentId"
) as "ActiveCount",
(
select count(cte."Id") from cte
left join "Medication" m3 on m3."Id" = cte."Id" and m3."AlfId" = any(_alfids::int[])
where public."CheckMedicationStatus"(m3, '{Pending}') = true and cte."ResidentId" = ri."ResidentId"
) as "PendingCount"
from residentIds ri --where false = true
)
Create TEMPORARY table ("ActiveCount" int, "PendingCount" int)as
select * from counts
;
как я могу это исправить?
Ответ №1:
ТАБЛИЦА CREATE должна быть перед общим табличным выражением
create temp table foo
as
with cte1 as (
...
), cte2 as (
...
), cte3 as (
...
), cte4 as (
...
), cte5 as (
...
)
select *
from cte5;
Комментарии:
1. Хорошо, это работает, но когда я пытаюсь вставить во временную таблицу, она по-прежнему выдает ошибку в той же точке создать временную таблицу foo с подсчетами как (…) вставить во временную как выбрать * из подсчетов;
2. Нет, вам не нужно
insert
(и вы не можете его использовать), когда вы используетеcreate table .. as select
3. на самом деле у меня есть 5 предложений with и, наконец, with Я хочу вставить данные во временную таблицу, которая будет использоваться последней, но это не работает
4. Количество CTE не имеет значения. Вы просто не можете использовать
insert
, когда используетеcreate table .. as select
. Все, что вам нужно, это finalselect
— подразумевается вставка5. Я хочу сохранить результат cte4 во временной таблице, а затем использовать его для запроса cte1 и присоединения к нему