我有一張表,我想從中刪除一系列行,但列表是變量(和硬編碼),所以我想定義一個輔助列表。 我知道我能做到這一點postgresql創建輔助列表
DELETE FROM table WHERE id IN (1, 4, 6, 7)
但問題是,如果我可以定義一個名爲列表,就像我會在Java或Python做變量。
DEFINE list (1, 4, 6, 7)
或類似的東西。
我有一張表,我想從中刪除一系列行,但列表是變量(和硬編碼),所以我想定義一個輔助列表。 我知道我能做到這一點postgresql創建輔助列表
DELETE FROM table WHERE id IN (1, 4, 6, 7)
但問題是,如果我可以定義一個名爲列表,就像我會在Java或Python做變量。
DEFINE list (1, 4, 6, 7)
或類似的東西。
嘗試使用值,例如:
t=# with aux_list(v) as (values (1),(4),(6),(7))
select * from generate_series(1,9,1) g where g in (select v from aux_list);
g
---
1
4
6
7
(4 rows)
是的,可以。使用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 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);