gpt4 book ai didi

postgresql - 在 postgresql 查询的 IN 子句中使用变量

转载 作者:行者123 更新时间:2023-11-29 13:23:24 27 4
gpt4 key购买 nike

我对 postgres 很陌生。我想完成一项简单的任务。

我有一个函数如下:

create or replace function function1(source json)     
returns json as $$
DECLARE
output_data json;
begin
raise notice '%',source::text;
select json_agg(name_id) into output_data from table1 where channel_id in SOURCE; -- I want to use SOURCE as dynamic
return output_data;
end;
$$ LANGUAGE plpgsql;

该函数输入一个 json 参数(源),我想使用该参数运行 IN 子句。

例如,当我运行以下命令时:

select function1('[5555558,5555559]'); 

我应该得到类似 [11111,22222] 的输出 ---> 这些是 name_id

完成此任务的一种方法是将 SOURCE 的所有值插入表 (new_table),然后执行以下操作。

select json_agg(name_id) into output_data from table1 where channel_id in (select channel_id from new_table);

我想知道其他更好的技术,例如使用等效的集合或动态查询。

谢谢

最佳答案

原则上,这可以通过单个 SQL 语句完成:

SELECT json_agg(t.name_id)
FROM table1 t
JOIN json_array_elements_text('[5555558,5555559]'::json) j(value)
ON j.value = t.channel_id::text;

如果你想要一个函数,那么它很简单:

CREATE FUNCTION function1 (source json) RETURNS SETOF json AS $$
SELECT json_agg(t.name_id)
FROM table1 t
JOIN json_array_elements_text(source) j(value) ON j.value = t.channel_id::text;
$$ LANGUAGE sql;

关于postgresql - 在 postgresql 查询的 IN 子句中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37860552/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com