SQL查询错误和错误

时间:2014-10-11 23:45:05

标签: sql sql-server

我遇到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 

数据库中只有一个销售部门。

对于为什么会发生这种情况的任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:3)

可能,job_history中有多行与“销售”部门相关。

连接操作返回所有匹配的行。

要获得明确的Department_Name列表,您可以在查询结尾添加 GROUP BY Department_name 。您还需要在选择列表中的Max_Salary列周围使用聚合函数...例如MAX(Max_Salary)

最佳做法是在查询中限定所有列引用。对于不熟悉数据库模式的读者,不清楚Max_Salary是来自Job_History表还是Job表。此外,关键字INNER对连接操作没有影响,可以省略该关键字。

- 这有效

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

答案 1 :(得分:0)

我更愿意发表评论,但我没有足够高的声誉。

你可以尝试一下,看看它给ids带来了什么。

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

答案 2 :(得分: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