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 に答える