在where子句中的count上获取错误“ORA-00920:无效的关系运算符”

时间:2012-10-04 19:34:19

标签: sql oracle10g

这是依赖关系的员工。我只显示有多个受抚养人的员工时遇到问题。不应该存在的行是emp_no 555555。

 SELECT emp_no, emp_name, dep_emp_no, dep_name, dep_relationship, trunc(MONTHS_BETWEEN(current_date, dep_date_of_birth)/12) "Age"
 FROM DEPENDENT d JOIN employee e ON e.emp_no=d.dep_emp_no
WHERE dep_date_of_birth=(SELECT MIN(DEP_DATE_OF_BIRTH) FROM DEPENDENT dd WHERE d.dep_emp_no=dd.dep_emp_no)


 EMP_NO EMP_NAME                       DEP_EM DEP_NAME             DEP_RELATI        Age
 ------ ------------------------------ ------ -------------------- ---------- ----------
 444444 Hickman, Ron                   444444 Amy                  DAUGHTER           22
 555555 Moore, Wayne                   555555 Sharon               SPOUSE             65
 111111 Li, Anna                       111111 Chris                SON                 8

这就是给我错误的原因:

 SELECT emp_no, 
        emp_name, 
        dep_emp_no, 
        dep_name, 
        dep_relationship, 
        trunc(MONTHS_BETWEEN(current_date, dep_date_of_birth)/12) "Age"
   FROM DEPENDENT d 
   JOIN employee e ON e.emp_no=d.dep_emp_no
  WHERE dep_date_of_birth=(SELECT MIN(DEP_DATE_OF_BIRTH) 
                             FROM DEPENDENT dd 
                            WHERE d.dep_emp_no=dd.dep_emp_no)
 and where DEP_EMP_NO exists (select count(dep_emp_no) 
                                from dependent 
                              having count(dep_emp_no)>1 
                            group by dep_emp_no);

1 个答案:

答案 0 :(得分:1)

计数中有and where DEP_EMP_NO太多且缺少条件。以下应该有效。

SELECT emp_no, 
       emp_name, 
       dep_emp_no, 
       dep_name, 
       dep_relationship, 
       trunc(MONTHS_BETWEEN(current_date, dep_date_of_birth)/12) "Age"
  FROM DEPENDENT d 
  JOIN employee e ON e.emp_no=d.dep_emp_no
 WHERE dep_date_of_birth=(SELECT MIN(DEP_DATE_OF_BIRTH) 
                            FROM DEPENDENT dd 
                           WHERE d.dep_emp_no=dd.dep_emp_no)
  and  exists (select count(dep_emp_no) 
                           from dependent d2 
                           where d.dep_emp_no=d2.dep_emp_no
                           group by dep_emp_no
                           having count(dep_emp_no)>1 );