我使用postgres 9.3。 什么从函数返回到" IN"操作
这是我的功能:
CREATE FUNCTION array_lowercase(args text[]) RETURNS TABLE (t text ) AS
$BODY$
SELECT btrim(lower(unnest(args)))::text AS tag
$BODY$
language sql IMMUTABLE;
结果是:
select array_lowercase(array[' AdaPterKiNd ',' ResoUrceKinD ']);
array_lowercase
-----------------
adapterkind
resourcekind
(2 rows)
但是当我试图在" IN"中使用该功能时运营商发出错误消息:
select * from hd_property where lower(property_name) in (array_lowercase(array[' AdaPterKiNd ',' ResoUrceKinD ']));
ERROR: argument of IN must not return a set
LINE 1: select * from hd_property where lower(property_name) in (arr...
^
在" IN"中使用相同的子查询。 operator(没有调用函数)工作正常:
select * from hd_property where lower(property_name) in ( SELECT btrim(lower(unnest(array[' AdaPterKiNd ',' ResoUrceKinD '])))::text);
property_id | property_name | property_category_id | property_type_id
--------------------------------------+---------------+----------------------+------------------
aea66c83-fe9f-3729-c3b7-1d000c9866cb | AdapterKind | 2 | 1
cbaf50eb-4b4b-39eb-d769-4737c9715019 | ResourceKind | 2 | 1
(2 rows)
从" IN"中使用的函数返回什么?操作
答案 0 :(得分:1)
必须像表一样使用返回表的函数。
select *
from hd_property
where lower(property_name) in (select t
from array_lowercase(array[' AdaPterKiNd ',' ResoUrceKinD ']));