我试图在PostgreSQL 9.6上关注PostgreSQL guide to get children from an adjacency tree。为了达成一致,我将重现它在此建议的命令:
WITH RECURSIVE tree AS (
SELECT id, ARRAY[]::INTEGER[] AS ancestors
FROM test WHERE parent_id IS NULL
UNION ALL
SELECT test.id, tree.ancestors || test.parent_id
FROM test, tree
WHERE test.parent_id = tree.id
) SELECT * FROM tree WHERE 3 = ANY(tree.ancestors);
我的理解是你只需要用你想要访问的表的名称替换test
,并使用包含父id的字段的名称替换parent_id
。所以我为所有实例都这样做了。但是,当我尝试运行此命令时,我得到一个超级模糊的'语法错误在或附近“)”'。
可能的原因是什么?
这对我的SQL客户端DBeaver来说是一个问题。当我在psql
中运行此命令时,它完全按预期工作。