0

这是员工与依赖关系。我无法仅显示拥有多个受抚养人的员工。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);
4

1 回答 1

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 );
于 2012-10-04T19:39:37.040 回答