gpt4 book ai didi

sql-server-2008 - SQL中Equi-Join和Inner-Join的区别

转载 作者:行者123 更新时间:2023-12-04 07:12:48 25 4
gpt4 key购买 nike

我有 2 个表,名为“table123”和“table246”。

table123”列:“ID”、“Dept_ID”、“First_Name”、“< em>姓氏', '薪水', '地址'.

table246”列:“Dept_ID”、“Dept_Name”。

我想找到每个部门工资最低的员工列表。我可以使用的两种方法是 Equi-JoinInner-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”和“Min_Salary”列以及所有相关数据。

但是,Inner-Join 语句不会运行,因为 First_Name 列需要包含在聚合函数或 GROUP BY 子句中。这真的让我很困惑,因为我不知道如何去解决它。我怎样才能调整内连接查询,以便给出与等值连接查询相同的结果?

最佳答案

试试这个:

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;

关于sql-server-2008 - SQL中Equi-Join和Inner-Join的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43002124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com