SQL查询返回错误的结果



对于大学作业,我们必须根据我们得到的问题编写一堆SQL查询,最后一个问题是:

'写一个查询,指出哪个员工被休病假的次数最多医生编号"D0001"。显示员工姓名;医生姓名和天数

我的问题是,即使我说我想选择什么值,它也会返回医生的错误名称,我无法理解为什么会发生这种情况。查询中的其他值正在按原样显示,唯一的问题是医生的名字与他们的ID不正确显示

CREATE TABLE DOCTORS(
DOCTOR_ID VARCHAR(5) NOT NULL PRIMARY KEY,
DOCTOR_NAME VARCHAR(30) NOT NULL
)
我们必须添加
INSERT INTO DOCTORS (DOCTOR_ID, DOCTOR_NAME) VALUES ('D0001', 'Thabo Ntlali')
INSERT INTO DOCTORS (DOCTOR_ID, DOCTOR_NAME) VALUES ('D0002', 'Deon Coetzee')
INSERT INTO DOCTORS (DOCTOR_ID, DOCTOR_NAME) VALUES ('D0003', 'Kwezi Mbete')
INSERT INTO DOCTORS (DOCTOR_ID, DOCTOR_NAME) VALUES ('D0004', 'Trevor January')
INSERT INTO DOCTORS (DOCTOR_ID, DOCTOR_NAME) VALUES ('D0005', 'Julia Robin')

我写的查询

SELECT TOP(1) emp.EMPLOYEE_NAME, emp.EMPLOYEE_SURNAME, d.DOCTOR_NAME, MAX(e.NUMBER_OF_DAYS) AS "NUMBER_OF_DAYS"
FROM DOCTORS AS D, EMPLOYEES emp 
JOIN EMPLOYEE_SICKLEAVE e
ON emp.EMPLOYEE_ID = e.EMPLOYEE_ID
WHERE e.DOCTOR_ID = 'D0001' 
GROUP BY emp.EMPLOYEE_NAME, emp.EMPLOYEE_SURNAME, d.DOCTOR_NAME
ORDER BY emp.EMPLOYEE_NAME, EMP.EMPLOYEE_SURNAME

注释中非常重要的一点

今天的提示:到处切换到现代的显式JOIN语法。更容易编写(没有错误),更容易读取(和维护),并且在需要时更容易转换为外部连接。

~ jarlh

让我们来看看你的连接:

...
FROM DOCTORS AS D, EMPLOYEES emp 
JOIN EMPLOYEE_SICKLEAVE e
ON emp.EMPLOYEE_ID = e.EMPLOYEE_ID
...

这是隐藏的事实,有3个表,但只有一个ON子句!

这可能是您的问题的原因。

所以让我们[尽可能地]重写它们:

...
FROM   DOCTORS
INNER
JOIN EMPLOYEES
ON EMPLOYEES.<SOMETHING> = DOCTORS.<SOMETHING>
INNER
JOIN EMPLOYEE_SICKLEAVE
ON EMPLOYEE_SICKLEAVE.EMPLOYEE_ID = EMPLOYEES.EMPLOYEE_ID
...

除了用户纠正的问题外,还有一个问题。为了获得工作天数最多的员工,您必须按每个员工的天数总和排序:ORDER BY SUM(e.NUMBER_OF_DAYS) DESC
同样在SELECT中,您必须更改sum()中的MAX()。

最新更新