ツリー ノードのすべての子を返すこの関数があります。
CREATE OR REPLACE FUNCTION fn_category_get_childs_v2(id_pai integer)
RETURNS integer[] AS
$BODY$
DECLARE
ids_filhos integer array;
BEGIN
SELECT array (
SELECT category_id FROM category WHERE category_id IN (
(WITH RECURSIVE parent AS
(
SELECT category_id , parent_id from category WHERE category_id = id_pai
UNION ALL
SELECT t.category_id , t.parent_id FROM parent
INNER JOIN category t ON parent.category_id = t.parent_id
)
SELECT category_id FROM parent
WHERE category_id <> id_pai
) )
) into ids_filhos;
return ids_filhos;
END;
次のようなselectステートメントで使用したいと思います。
select *
from teste1_elements
where category_id in (select * from fn_category_get_childs_v2(12))
私も同じ結果でこの方法を試しました:
select *
from teste1_elements
where category_id=any(select * from fn_category_get_childs_v2(12)))
しかし、次のエラーが表示されます。
ERROR: operator does not exist: integer = integer[]
LINE 1: select * from teste1_elements where category_id in (select *...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
関数は整数配列を返しますが、それが問題ですか?
SELECT * from fn_category_get_childs_v2(12)
次の配列 ( integer[]
)を取得します。
'{30,32,34,20,19,18,17,16,15,14}'