我可以用条件逻辑来做这件事,但我想我是否可以在一个查询中做到这一点。我想基于id数组限制查询的结果,但如果数组为空,我想返回所有行:
CREATE OR REPLACE FUNCTION maybe_filter(arr integer[])
RETURNS TABLE( ... )
LANGUAGE sql
AS $function$
select *
from some_table st
join (select distinct unnest($1) id order by 1) arr
on st.id = arr.id OR ...
$function$;
答案 0 :(得分:0)
我在写这个问题时想通了。卫生署。但是,我不想让世界剥夺我的聪明才智<-)
所以张贴q / a而不是回到工作岗位。
CREATE OR REPLACE FUNCTION maybe_filter(arr integer[])
RETURNS TABLE( ... )
LANGUAGE sql
AS $function$
select *
from some_table st
where array_length($1,1) = 0 or st.id = any($1)
$function$;