【发布时间】:2020-11-19 08:12:59
【问题描述】:
当满足以下条件时,我尝试使用 select 语句返回行:
第一个条件: 员工的 EMPLOYEE_HOME_ORG 不等于 396000 或 396010 并且 DEGREE_HIERARCHY 小于 40 并且 FACULTY_DEGREE_CODE 不等于“MS”或“MA”
第二个条件: 员工的 DEGREE_HIERARCHY 小于 40,员工的 FACULTY_SUBJECT_CODE 和 FACULTY_DEGREE_CODE 不在表 SUBJ_CODE_CROSSWALK 中。
我收到以下错误:
ORA-00920: invalid relational operator
请看下面的代码,非常感谢任何帮助!
SELECT V.FACULTY_DEGREE_CODE,
V.FACULTY_SUBJECT_CODE,
I.EMPLOYEE_DEPARTMENT_HOME_ORG,
MAX(D.DEGREE_HIERARCHY)
FROM V_DEGRESS V
JOIN DEGREE_CROSSWALK D
ON V.FACULTY_DEGREE_CODE =
D.DEGREE_CODE
JOIN I_REPORT_DETAILS I
ON V.PIDM = I.HR_PIDM
LEFT JOIN SUBJ_CODE_CROSSWALK S
ON V.FACULTY_DEGREE_CODE =
S.FACULTY_DEGREE_CODE
LEFT JOIN SUBJ_CODE_CROSSWALK S
ON S.FACULTY_SUBJECT_CODE =
V.FACULTY_SUBJECT_CODE
WHERE V.PERSON_SKEY = 12345
AND
(
(I.EMPLOYEE_DEPARTMENT_HOME_ORG != 396000
and I.EMPLOYEE_DEPARTMENT_HOME_ORG != 396010)
and (d.DEGREE_HIERARCHY < 40 )
and
(V.FACULTY_DEGREE_CODE != 'MS' and
V.FACULTY_DEGREE_CODE != 'MA')
)
--and NOT ONE SUBJ CODE CROSSWALK
AND
(
(D.DEGREE_HIERARCHY < 40)
AND
(V.FACULTY_SUBJECT_CODE,
V.FACULTY_DEGREE_CODE NOT IN
(SELECT S.FACULTY_SUBJECT_CODE,
S.FACULTY_DEGREE_CODE
FROM SUBJ_CODE_CROSSWALK
S
WHERE S.FACULTY_SUBJECT_CODE =
V.FACULTY_SUBJECT_CODE
AND V.FACULTY_DEGREE_CODE =
S.FACULTY_DEGREE_CODE
)
)
)
GROUP BY V.FACULTY_DEGREE_CODE,
V.FACULTY_SUBJECT_CODE,
I.EMPLOYEE_DEPARTMENT_HOME_ORG
【问题讨论】:
-
这些括号是怎么回事???
-
你
LEFT JOIN的目的是什么???WHERE子句中的所有这些过滤器基本上将那些LEFT JOIN转换为INNER JOIN。 -
您的查询似乎有两个
LEFT JOIN SUBJ_CODE_CROSSWALK S表。是这样吗?如果你需要两次加入一个表,你应该使用两个不同的别名。 -
要添加到@TheImpaler 通知,也许您可以在 ON 子句中使用 AND 条件加入一次,而不是引用表两次。
标签: sql oracle max relational-operators