**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
10个月前关门了。
改进这个问题
现在,我有以下针对oracle的工作查询:
select * from (
select orgId, oNdId, stamp, op,
lgin, qwe, rty,
tusid, tnid, teid,
thid, tehid, trid,
name1, name2,
xtrdta, rownum as rnum from
(
select a.*
from tblADT a
where a.orgId=? and EXISTS(
SELECT oNdId, prmsn FROM (
SELECT oNdId, rp.prmsn FROM tblOND
LEFT JOIN tblRoleprmsn rp ON rp.roleId=? AND rp.prmsn='vors'
START WITH oNdId IN (
SELECT oNdId FROM tblrnpmsn rnp
WHERE rnp.roleId=?
AND rnp.prmsn=?
)
CONNECT BY PRIOR oNdId = parentId
)
WHERE oNdId = a.oNdId OR 1 = (
CASE WHEN prmsn IS NOT NULL THEN
CASE WHEN a.oNdId IS NULL THEN 1 ELSE 0 END
END
)
)
AND op IN (?)
order by stamp desc
) WHERE rownum < (? + ? + 1)
) WHERE rnum >= (? + 1)
目前,我正在尝试为postresql实现模拟。根据我的调查,我可以使用递归cte。
但我并不成功。我找到的示例都没有where子句,所以不太容易。
你能帮我一下吗?
1条答案
按热度按时间gt0wga4j1#
oracle查询似乎有一些我无法理解的额外的怪癖和条件。它可能与特定的用例有关。
在没有样本数据的情况下,我将向您展示一个简单的案例。你说:
有一个表'tblond',它有两列'ondid'和'parentid',这是一个层次结构
根据一个初始筛选 predicate ,下面的查询将获取节点的所有子节点:
递归CTE不限于层次结构,而是任何类型的图。只要你能描绘出“走”到下一个节点的关系(
#1
)您可以继续添加行。该示例还显示了一个“虚构”列
lvl
; 您可以根据需要/需要生成任意多的列。前一节
UNION ALL
是只运行一次的“锚定”查询。之后UNION ALL
是以迭代方式运行直到不再返回任何行的“迭代”查询。