impressive17
@impressive17

Как задать переменную а потом использовать ее в запросе в Postgres?

Я хочу перед основным запросом задать массив mass, например 1,2,3
и в запросе писать что-то вроде field NOT IN mas
Подскажите, пожалуйста, как это сделать в postgres?
  • Вопрос задан
  • 11517 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Akina
Сетевой и системный админ, SQL-программист.
Используйте CTE - туда слона запихнуть можно, и, если надо, то и не одного, хоть скалярно, хоть набор записей...

Типа (игнорируя синтаксис, только принцип):
WITH
some_data AS ( SELECT ARRAY(1,2,3) AS some_value )
SELECT * 
FROM some_table
CROSS JOIN some_data
WHERE some_table.some_field NOT IN some_data.some_value


К тому же такое решение вполне себе переносимое.
Ответ написан
@galaxy
Специального механизма, как в некоторых других СУБД, для этого нет. Можно, в зависимости от конкретной задачи, использовать:

1. Анонимные блоки plpgsql
do $$
declare
  list int[] := array[2619,1247,4159];
  r text;
begin
  select string_agg(relname, ',') into r from pg_class where oid = any(list);
  raise notice '%', r;
end;
$$;

# NOTICE:  pg_statistic,pg_type,pg_toast_2600

(вернуть результат запроса из такого блока нельзя, поэтому там raise notice)

2. Psql переменные
(разумеется, только если работаете в программе-клиенте psql)
> \set list 2619,1247,4159
> select * from pg_class where oid in (:list);


3. Временная (или даже не временная) таблица. Тут, думаю, примеры не требуются.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы