我在使用函数中的CTE结果时遇到困难.给出以下Postgres表.
CREATE TABLE directory ( id SERIAL PRIMARY KEY,name TEXT,parent_id INTEGER REFERENCES directory(id) ); INSERT INTO directory (name,parent_id) VALUES ('Root',NULL),('D1',1),('D2',2),('D3',3);
我有这个递归CTE,它返回目录的后代.
WITH RECURSIVE tree AS ( SELECT id FROM directory WHERE parent_id = 2 UNION ALL SELECT directory.id FROM directory,tree WHERE directory.parent_id = tree.id )
返回的值是我所期望的,可以使其等于数组
SELECT (SELECT array_agg(id) FROM tree) = ARRAY[3,4];
我可以使用数组从表中选择值
SELECT * FROM directory WHERE id = ANY(ARRAY[3,4]);
但是,我无法使用CTE的结果来完成同样的事情.
SELECT * FROM directory WHERE id = ANY(SELECT array_agg(id) FROM tree);
结果错误表示存在类型不匹配.
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
但是,我不确定如何正确地完成这个.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。