这是依赖关系的员工。我只显示有多个受抚养人的员工时遇到问题。不应该存在的行是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);
答案 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 );