我想构造一个“递归”查询以在我的PostgreSQL数据库上使用,这个想法像您想象的一样基本:)
SELECT sourceid, destinationid FROM trail.log
WHERE sourceid = 'T0'
OR sourceid in (SELECT destinationid FROM trail.log where sourceid ='T0')
OR sourceid in (SELECT destinationid FROM trail.log where sourceid in ( you see where I want to go ... )
OR ...
根据互联网,这是我应该做的:
WITH cte_traillog AS (
SELECT
sourceid, destinationid
FROM
trail.log
WHERE sourceid = 'T0'
UNION ALL
SELECT
e.sourceid, e.destinationid
FROM
trail.log e
INNER JOIN cte_org o
ON o.destinationid = e.sourceid
)
SELECT * FROM cte_traillog;
知道第一个查询在不到一分钟的时间内在我的服务器上答复,第二个查询的性能是否相同?(下面是一些可能很愚蠢的问题)如果我的第一个查询没有造成太大麻烦,是否有第二个查询会使服务器崩溃的风险?如果数据将导致无限循环该怎么办?有没有办法防止无限循环?更笼统地说,这是正确的方法吗?
提前感谢您的时间。
祝您有美好的一天。
您的查询中有一个错误:您在递归分支中引用CTE时使用了错误的名称。除此之外,您的查询看起来还不错。