對于大學作業,我們必須根據我們得到的問題撰寫一堆 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
uj5u.com熱心網友回復:
評論中非常重要的一點
今日提示:在任何地方都切換到現代的、顯式的 JOIN 語法。更容易撰寫(沒有錯誤),更容易閱讀(和維護),并且在需要時更容易轉換為外連接。
?賈爾
所以讓我們來看看你的加入:
...
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
...
uj5u.com熱心網友回復:
除了用戶gvee糾正的問題之外,還有另一個問題。要獲取最多天數的員工,您必須按天數排序:ORDER BY MAX(e.NUMBER_OF_DAYS) DESC
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/328785.html
標籤:sql sql-server 查询语句
