我有一个表,我想从中删除一系列行,但列表是可变的(并且是硬编码的),所以我想定义一个辅助列表。 我知道我可以做到这一点
json_array_get()
但问题是我是否可以定义一个名为list的变量,就像我在Java或Python中所做的那样。
DELETE FROM table WHERE id IN (1, 4, 6, 7)
或类似的东西。
答案 0 :(得分:1)
尝试使用VALUES,例如:
%
答案 1 :(得分:1)
是的,你可以。使用set
语句设置值,使用current_setting()
检索它:
set public.list to '{1,4,6,7}';
select *
from generate_series(1,10) as i
where i = any(current_setting('public.list')::int[]);
注意:
参数名称应包含点,例如只有list
无效。
我已将column in (<list>)
的同义词与数组一起使用,该数组允许将列表作为单个值。
set
语句仅为会话设置变量。如果您想保持使用alter ... set ...
代替
alter database my_db set public.list to '{1,4,6,7}';
用于数据库或
alter role my_role set public.list to '{1,4,6,7}';
对于特定用户(在这种情况下,您应该重新登录以获得效果)。
另一种方法是创建视图:
create view list(x) as values(1),(4),(6),(7);
并以这种方式使用它:
select *
from generate_series(1,10) as i
where i in (table list);