Как сделать 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)