0

Oracle 在创建物化视图时限制在 select 子句中使用子查询。当您这样做时,您会收到错误“ORA-22818:此处不允许子查询表达式”。

由于这个限制,我一直在努力重写查询并将子查询移出 select 子句。该查询使用父/子关系递归地构建路径,我还试图通过将表连接回自身并查看记录是否有子项来指示特定类别是否为叶类别。

SELECT A.PRODUCTCATEGORYID, A.PARENTCATEGORYID, SYS_CONNECT_BY_PATH(A.LABEL, ':') "PATH", 
(
        SELECT CASE WHEN MAX(PRODUCTCATEGORYID) IS NOT NULL THEN 0 ELSE 1 END 
        FROM PRODUCT_CATEGORY
        WHERE parentcategoryid = A.PRODUCTCATEGORYID
) as "LEAF"
FROM PRODUCT_CATEGORY A
CONNECT BY PRIOR A.PRODUCTCATEGORYID = A.PARENTCATEGORYID
START WITH A.PARENTCATEGORYID IS NULL;

谁能指出我应该如何重写它以使子查询不是 select 子句的一部分的正确方向?

提前致谢。

4

1 回答 1

1

您可以使用CONNECT_BY_ISLEAF伪列,如果当前节点是叶子,则返回 1,否则返回 0,因此您的查询应重写如下:

SELECT A.PRODUCTCATEGORYID, A.PARENTCATEGORYID, SYS_CONNECT_BY_PATH(A.LABEL, ':') "PATH", 
  CONNECT_BY_ISLEAF as "LEAF"
FROM PRODUCT_CATEGORY A
CONNECT BY PRIOR A.PRODUCTCATEGORYID = A.PARENTCATEGORYID
START WITH A.PARENTCATEGORYID IS NULL;

阅读 Oracle 文档中的更多信息:CONNECT_BY_ISLEAF 伪列

于 2013-11-01T22:21:06.057 回答