【发布时间】:2016-12-17 00:35:40
【问题描述】:
我编写了一个运行了数周的查询,但今天早上我的 Select Inner Join 出现以下错误
ORA-01799:列不能外连接到子查询
这是我的查询
SELECT
PERSON.PERSONID,
PERSON.LASTNAME,
PERSON.FIRSTNAME,
PERSON.MIDDLENAME,
FROM PERSON_VIEW PERSON
LEFT JOIN (SELECT PERSONID, DRIVERLICENSE_NUM, DRIVERLICENSE_EXP_DT,UPDATED_DT
FROM DRIVERLICENSE_VIEW) DRIVERLICENSE
ON DRIVERLICENSE.PERSONID = PERSON.PERSONID AND
((trunc(sysdate) - DRIVERLICENSE.UPDATED_DT <= 1000)) AND
DRIVERLICENSE_EXP_DT = (SELECT MAX(DRIVERLICENSE_EXP_DT)
FROM DRIVERLICENSE_VIEW PPT
WHERE PPT.PERSONID = DRIVERLICENSE_VIEW.PERSONID)
当我删除内部查询时,它可以工作,但这工作了几个星期。
DRIVERLICENSE_EXP_DT = (SELECT MAX(DRIVERLICENSE_EXP_DT)
FROM DRIVERLICENSE_VIEW PPT
WHERE PPT.PERSONID = DRIVERLICENSE_VIEW.PERSONID)
如何修复此查询以使其再次工作?
谢谢。
【问题讨论】:
-
您确定该查询早先有效吗,因为我确信它永远不会运行,因为它有错误。检查您发布的查询的第 5 行。
-
这里通常的做法是将子查询作为视图持久化,然后加入该视图。
-
正如@Raj_Te 所指出的,查询只是突然 开始产生此错误是不可能的。如果它以前工作过,那么它一定是一个不同的查询。
-
您确定您(或某人/某事)没有更改该子查询吗? WHERE 子句有什么作用?您在 LHS 上有 PPT,在 RHS 上有 DRIVERLICENSE_VIEW,但是在上面的行中,您将 PPT 定义为 DRIVERLICENSE_VIEW 的另一个名称...您只是在 personid 中测试非空值吗?因为这就是 WHERE 子句的全部作用。或者这是您实际查询的修改版本?