我有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查询相同的结果?
答案 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;