为什么在此代码上出现缺失的括号错误

时间:2018-09-25 16:23:08

标签: sql oracle

我正在运行此查询,但我不断收到缺少正确的括号错误消息。查询是较大查询的一部分。较大的查询运行良好,添加以下代码后,我得到了缺少的括号错误。

 (( SELECT (CASE WHEN NAME = 'ELP' THEN 
                 'ELP'
                 WHEN NAME  = 'MDP' THEN 'MDP'
                 ELSE 'Other'
                 END ) AS P_TYPE
                 FROM JOB_INFORMATION_D 
                 INNER JOIN EVENT_F 
                      ON EVENT_F.JOB_INFO_ROW_ =JOB_INFORMATION_D.ROW_WID
                      INNER CANDIDATE_D ON CANDIDATE_D.ROW_WID =     EVENT_F.CANDIDATE_ROW_WID
                     WHERE STS_NAME = 'Extended'
                     AND STEP_NAME = 'Offer'
              AND inner.PZNUM = OUTERAPP.PI_CANDIDATE_NUM

              ORDER BY DT ASC) T1 WHERE ROWNUM=1),

1 个答案:

答案 0 :(得分:2)

您有两个WHERE子句,但只有一个SELECT语句。第二个WHERE子句在括号中的SELECT之外,因此不属于任何SELECT。

就像@mathguy所说的那样,缺少一个JOIN关键字。

将语句重写为

SELECT *
FROM
  ( SELECT
        CASE WHEN NAME = 'ELP' THEN 'ELP'
             WHEN NAME  = 'MDP' THEN 'MDP'
             ELSE 'Other'
        END AS P_TYPE
    FROM
        JOB_INFORMATION_D
        INNER JOIN EVENT_F
            ON EVENT_F.JOB_INFO_ROW_ = JOB_INFORMATION_D.ROW_WID
        INNER JOIN CANDIDATE_D
            ON CANDIDATE_D.ROW_WID = EVENT_F.CANDIDATE_ROW_WID
    WHERE
        STS_NAME = 'Extended' AND
        STEP_NAME = 'Offer' AND
        inner.PZNUM = OUTERAPP.PI_CANDIDATE_NUM
    ORDER BY DT ASC
  )
WHERE
    ROWNUM = 1

也有这些inner.PZNUMOUTERAPP.PI_CANDIDATE_NUM,但是没有名为innerOUTERAPP的表。该SQL完全错误,或者您没有向我们显示整个命令。

因此,您应该使用表别名,然后为所有使用的列添加这些别名的前缀。像现在这样,看不到这些列属于哪个表。

...
FROM
    JOB_INFORMATION_D J
    INNER JOIN EVENT_F E
        ON E.JOB_INFO_ROW_ = J.ROW_WID
    INNER JOIN CANDIDATE_D C
        ON C.ROW_WID = E.CANDIDATE_ROW_WID
...