以下CTE查询有问题:
WITH RECURSIVE najdi_tot(sj) AS (
SELECT nad FROM s_vztah WHERE pod=581
UNION
SELECT pod FROM s_vztah WHERE nad=581
UNION
SELECT sv.nad FROM najdi_tot n, s_vztah sv
WHERE sv.pod = n.sj
UNION
SELECT sv.pod FROM najdi_tot n, s_vztah sv
WHERE sv.nad = n.sj
)
SELECT array_agg(sj) FROM najdi_tot发生以下错误:
ERROR: recursive reference to query "najdi_tot" must not appear within its non-recursive term
LINE 6: SELECT sv.nad FROM najdi_tot n, s_vztah sv
^我做了一个谷歌搜索( postgresql "recursive reference to query" "must not appear within its non-recursive term" ),除了邮件列表之外什么都没有找到,在那里我找不到解决方案(也许它在那里,但隐藏在讨论中)。
我的查询应该做的是找到从连接同一表中的两行的表中链接的所有行(nad和pod)。
发布于 2014-08-07 09:54:39
这个问题是由递归调用中的乘法引起的。当我删除其中一个,问题就解决了:
WITH RECURSIVE najdi_tot(sj) AS (
SELECT nad FROM s_vztah WHERE pod=581
UNION
SELECT pod FROM s_vztah WHERE nad=581
UNION
SELECT sv.nad FROM najdi_tot n, s_vztah sv
WHERE sv.pod = n.sj
)
SELECT array_agg(sj) FROM najdi_tot然后,我意识到这种关系是对称的--在第一次调用时,我得到了所有的链接行,递归只添加了我在开头的行。因此,我删除了递归,一切都很好:
WITH najdi_tot(sj) AS (
SELECT nad FROM s_vztah WHERE pod=581
UNION
SELECT pod FROM s_vztah WHERE nad=581
)
SELECT array_agg(sj) FROM najdi_tothttps://dba.stackexchange.com/questions/73385
复制相似问题