SQL查询D0001医生相关病假数据返回错误医生姓名问题求助
问题根因分析
你写的SQL存在两个核心问题导致医生姓名错误、结果不符合要求:
- 多表关联缺少关联条件,产生笛卡尔积
你用逗号连接DOCTORS表和EMPLOYEES表,但没有建立DOCTORS表和EMPLOYEE_SICKLEAVE表的关联逻辑,缺少D.DOCTOR_ID = e.DOCTOR_ID的匹配条件,会生成两张表的全量笛卡尔积,导致医生姓名和审批记录完全匹配混乱。 - 排序逻辑错误,无法取到病假天数最多的员工
你当前ORDER BY是按员工名、员工姓排序,TOP(1)取到的是排序后最靠前的员工,而非病假天数最多的员工。
修正后的查询语句
SELECT TOP(1) emp.EMPLOYEE_NAME, emp.EMPLOYEE_SURNAME, d.DOCTOR_NAME, MAX(e.NUMBER_OF_DAYS) AS NUMBER_OF_DAYS FROM DOCTORS d -- 明确关联医生表和病假表,保证医生ID匹配 JOIN EMPLOYEE_SICKLEAVE e ON d.DOCTOR_ID = e.DOCTOR_ID JOIN EMPLOYEES emp ON emp.EMPLOYEE_ID = e.EMPLOYEE_ID WHERE d.DOCTOR_ID = 'D0001' GROUP BY emp.EMPLOYEE_NAME, emp.EMPLOYEE_SURNAME, d.DOCTOR_NAME -- 按病假天数倒序,取TOP1就是天数最多的记录 ORDER BY NUMBER_OF_DAYS DESC
内容的提问来源于stack exchange,提问作者PureWare -Legends Of Gaming
相关产品推荐
相关产品推荐

