SQL中

时间:2017-03-24 14:30:11

标签: sql-server-2008

我有2个名为' table123 '和' table246 '的表。

' table123 '列:' ID ',' Dept_ID ',' First_Name ','< em>姓氏','薪水','地址'。

' table246 '列:' Dept_ID ',' Dept_Name '。

我想找到每个部门薪水最低的员工名单。我可以采用的两种方法是 Equi-Join 内部加入。我被告知他们都可以用来提供所需的结果。

我使用的查询:

同等联接:

SELECT First_Name, b.Dept_Name, alt.Min_Salary AS Min_Salary
FROM table123 a, table246 b,
(SELECT Dept_ID, MIN(Salary)Min_Salary
FROM table123
GROUP BY Dept_ID)alt
WHERE a.Dept_ID = b.Dept_ID
AND a.salary = alt.Min_Salary
AND a.Dept_ID = alt.Dept_ID;

内加入:

SELECT MIN(Salary)Min_Salary, Dept_Name
FROM table123 a, table246 b
INNER JOIN (SELECT First_Name, MIN(Salary)
FROM table123
GROUP BY Dept_ID)alt
ON b.Dept_ID = alt.Dept_ID;

Equi-Join语句为我提供了所需的表,其中包含列'First_Name','Dept_Name'和&amp; 'Min_Salary',包含所有相关数据。

但是,Inner-Join语句不会运行,因为First_Name列需要包含在聚合函数或GROUP BY子句中。这真让我感到困惑,因为我不知道如何修复它。如何调整Inner-Join查询,以便提供与Equi-Join查询相同的结果?

1 个答案:

答案 0 :(得分:2)

试试这个:

SELECT a.First_Name, b.Dept_Name, alt.Min_Salary AS Min_Salary
FROM table123 a
INNER JOIN table246 b
    ON a.Dept_ID = b.Dept_ID
INNER JOIN (
            SELECT Dept_ID, MIN(Salary) Min_Salary
            FROM table123
            GROUP BY Dept_ID
           ) alt
    ON b.Dept_ID = alt.Dept_ID
WHERE a.Salary = alt.Min_Salary;