我想从jsonb对象中选择一个整数数组或一个整数数组,然后在IN()
函数中使用该数组中的数据。我想在同一个声明中这样做。我可以创建jsonb
或integer[]
列。
example: SELECT *
FROM table
WHERE id IN(selected array)
我试过
SELECT the array and use: `array_to_string(anyarray, text [, text])`
答案 0 :(得分:0)
如果你想使用array_to_string
值作为IN
的标量值,你需要动态sql,所以一个语句不会这样做。
让我们假设:
t=# create table i (c int);
CREATE TABLE
t=# insert into i select generate_series(1,9);
INSERT 0 9
然后:
t=# do $$
declare
_r record;
begin
for _r in execute format($l$ select * from i where c in (%s)$l$,(select array_to_string(array[1,2,3],','))) loop
raise info '%',_r;
end loop;
end;
$$
;
INFO: (1)
INFO: (2)
INFO: (3)
DO
如果您想要一个语句,可以使用= ANY
:
t=# select * from i where c = any(array[1,2,3]);
c
---
1
2
3
(3 rows)
或IN(subquery)
:
t=# select * from i where c in(select unnest(array[1,2,3]));
c
---
1
2
3
(3 rows)
最后通常更有效的是加入值而不是IN
,例如:
t=# select i.* from i join (select unnest(array[1,2,3]) u ) j on j.u = i.c;
c
---
1
2
3
(3 rows)
虽然
不一定是小阵列答案 1 :(得分:0)
由于Vao Tsun已经回答,最简单的选择将是
SELECT *
FROM table
WHERE
_id = ANY('{1,4,5}'::int[]);
如果您打算查询另一个表并将结果用于此查询
SELECT *
FROM table_2
WHERE
_id = ANY(
ARRAY(select _id
FROM table_1
WHERE col_cond = <condition>
)
)