FROM子句中的临时表而不是WITH子句

问题描述 投票:0回答:1

我有这个查询(运行完美):

WITH TEMPTABLE AS(
            SELECT count(CONTRACT_ID) AS no_contract, T.BRANCH_ID as branch
            FROM CONTRACT, "EMPLOYMENT" T, TABLE(T."EMPLOYEE") TT
            WHERE CONTRACT.EMPLOYEE_ID = TT.EMPLOYEE_ID
                  AND CONTRACT.CONTRACT_VT_START BETWEEN '01/01/2018' AND '30/06/2018'
            GROUP BY T.BRANCH_ID
        )
        SELECT branch
        FROM TEMPTABLE
        WHERE no_contract IN (SELECT MAX(no_contract)
                             FROM TEMPTABLE);

我想知道是否可以用另一种方式而不是WITH子句来完成。像这样的东西:

SELECT count_per_branch.BRANCH
FROM (SELECT count(CONTRACT_ID) AS no_contract, BRANCH_ID AS BRANCH
      FROM CONTRACT, "EMPLOYMENT" T, TABLE(T."EMPLOYEE") TT
      WHERE CONTRACT.EMPLOYEE_ID = TT.EMPLOYEE_ID
            AND CONTRACT.CONTRACT_VT_START BETWEEN '01/01/2018' AND '30/06/2018'
      GROUP BY T.BRANCH_ID) count_per_branch
WHERE count_per_branch.no_contract =
            (SELECT max(count_per_branch.no_contract)
             FROM count_per_branch);

这给出了ORA-00942:“表或视图不存在”错误在行:9

sql oracle oracle11g
1个回答
2
投票

您可以在FROM子句中使用子查询:

FROM (SELECT count(CONTRACT_ID) ... )

你可以给它一个别名:

FROM (SELECT count(CONTRACT_ID) ... ) count_per_branch

您可以使用该别名来限定列引用:

WHERE count_per_branch.no_contract =

但是您不能将该别名用作另一个子查询中的行源,这是您在此处尝试执行的操作:

(SELECT max(count_per_branch.no_contract)
 FROM count_per_branch)

要以这种方式“重用”子查询,必须使用公用表表达式语法 - 即WITH子句。

© www.soinside.com 2019 - 2024. All rights reserved.