2014-10-11 96 views
0

我遇到SQL查詢問題。SQL查詢錯誤和錯誤

問題:顯示所有在最大薪水大於10000

我得到這個輸出的部門,但它看起來不正確。

我的代碼:

SELECT 
    Department_Name, Max_Salary 
FROM 
    Departments 
INNER JOIN 
    Job_History ON Departments.department_id = Job_History.department_id 
INNER JOIN 
    Jobs ON Job_History.job_id = jobs.job_id 
WHERE 
    Max_Salary > 10000 

輸出:

DEPT_NAME | MAX_SALARY 
------------------------ 
Accounting | 16,000 
Sales  | 12,080 
Sales  | 20,080 

只有一個銷售部門在數據庫中。

任何幫助,爲什麼發生這種情況將不勝感激。

+0

你可以去各個表,並獲得與最高工資部門?仔細檢查部門名稱。 – 2014-10-11 23:56:07

+0

我假設Max_Salary來自Job_History或Jobs,並且在銷售部門的情況下,這些表格中的多個行適用,因此您在輸出中看到Sales不止一次。您可能需要對Max_Salary求和並使用Group By和Having分句。如果您可以向我們展示表格中的相關數據,它可以讓我們爲您提供一個體面的答案。 – NigelK 2014-10-11 23:59:13

+0

@BoratSagdiyev我不能不幸地因爲Department_Name在dbo.Departments中,dbo.Job_History通過department_id鍵鏈接部門和工作。 Max_Salary位於作業表中,作業_ID鏈接Job_History和作業。我必須鏈接3個表格。我已經完成了。我嘗試了NigelK的建議並取得了一些成功,但它仍然只顯示3個部門沒有重複,但我認爲更多的行應該受到影響。 – JasonL1983 2014-10-12 00:52:55

回答

0

我寧願評論,但我沒有足夠高的聲望。

你可以試試看看它爲ID帶來了什麼。

Select Department_Name, Max_Salary,D.department_id,J.job_id 
From Departments D 
INNER JOIN Job_History J_H 
ON D.department_id=J_H.department_id 
INNER JOIN Jobs J 
ON J_H.job_id=J.job_id 
WHERE Max_Salary > 10000 
3

可能的,job_history有多行與'Sales'部門有關。

連接操作返回全部匹配行。

要獲得Department_Name的明確列表,您可以將GROUP BY Department_name添加到查詢的末尾。您還需要在選擇列表中的Max_Salary列周圍使用聚合函數。 MAX(Max_Salary)

最佳做法是在查詢中限定全部列引用。對於不熟悉數據庫模式的讀者,目前還不清楚Max_Salary是來自Job_History表還是Job表。另外,關鍵字INNER對連接操作沒有影響,該關鍵字可以省略。

--This工作

SELECT d.department_name 
    , MAX(j.max_salary) AS max_salary 
    FROM Departments d 
    JOIN Job_History h 
    ON h.department_id = d.department_id 
    JOIN Jobs j 
    ON j.job_id = h.job_id 
WHERE j.max_salary > 10000 
GROUP BY d.department_name 
0
Select d.department_name 
, MAX(j.max_salary) AS max_salary 
From Departments D 
INNER JOIN Job_History J_H 
ON D.department_id=J_H.department_id 
INNER JOIN Jobs J 
ON J_H.job_id=J.job_id 
GROUP BY d.department_name 
having max(j.max_salary)>10000 
+1

這個答案可以通過一些評論來改善......問題中的代碼有什麼不正確?你的代碼如何解決這個問題?儘管如此,爲了迴應其他人提出的標誌,我將其標記爲「看起來不錯」。 – ArtOfWarfare 2014-10-12 04:38:25