Как сделать SELECT UNNEST ARRAY для списка, не хранящегося в базе данных, в django

Я пытаюсь воспроизвести этот упрощенный запрос Postgres в Django (где [v1, v2, ...] - это список в python):

SELECT * FROM UNNEST(ARRAY[v1, v2, ...]) objs (obj)
WHERE EXISTS(
  SELECT "table"."field1"
  FROM "table"
  WHERE "table"."field2" = 'value' AND "table"."field1" = fp
)

Но я не могу найти способ использовать UNNEST(ARRAY(... на чем-то, что не является таблицей.

Для этого я использую общее табличное выражение (CTE) :

WITH cte AS
(
SELECT UNNEST(ARRAY[
v1,
v2,
......
])::int objs
)

then in query use RIGHT JOIN


полный запрос:

WITH cte AS
(
SELECT UNNEST(ARRAY[
v1,
v2,
......
])::int objs
)

select *
from your_table as t
RIGHT JOIN cte ON cte.objs = t."your objects from table"

ARRAY(subquery) - специальный конструктор массивов, требующий отношения.

(2022-09-26 12:59:15) postgres=# select unnest(array(values(1),(2),(3)));
┌────────┐
│ unnest │
╞════════╡
│      1 │
│      2 │
│      3 │
└────────┘
(3 rows)
Вернуться на верх