(1, 7, 10000)
не определяет массив.Это конструктор строки , который создает анонимную запись (с тремя полями).
Литерал массива пишется в квадратных скобках и должен начинаться с ключевого слова array
, например array[1, 7, 10000]
.В качестве альтернативы вы можете записать его в виде строкового значения: '{1,7,1000}'
При использовании CTE в качестве «контейнера» для переменных / параметров я обычно использую перекрестное соединение, чтобы сделать его доступным для запроса.Это меньше, набрав
with vars as (
select
array[1, 7, 10000] bubble_ids,
'Frank' as name --<< you need the AS, because name is a keywod
)
select *
from walruses
inner join tusks on walruses.id = tusks.walrus_id
cross join vars v
where name = v.vars
and tusks.bubble_id = any(v.bubble_ids);
Я предпочитаю выражение values
вместо select
для определения постоянных значений.
with vars(bubble_ids, name) as (
values (array[1, 7, 10000], 'Frank')
)
select *
from walruses
inner join tusks on walruses.id = tusks.walrus_id
cross join vars v
where name = v.vars
and tusks.bubble_id = any(v.bubble_ids);