Как создать временную таблицу, используя общее табличное выражение

#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 . Все, что вам нужно, это final select — подразумевается вставка

5. Я хочу сохранить результат cte4 во временной таблице, а затем использовать его для запроса cte1 и присоединения к нему