gpt4 book ai didi

mysql - 了解自连接 (SQL) 中 ON 子句的顺序

转载 作者:行者123 更新时间:2023-12-05 08:51:30 25 4
gpt4 key购买 nike

我正在尝试了解 SQL 自连接 - 特别是 ON 子句的顺序在查询中的重要性。这可能是一个基本问题,但请耐心等待,因为我是查询语言的初学者。

这实际上是一个LeetCode Question - #181我试图找到薪水高于其经理的员工。您可以通过 LeetCode 链接或我在下面提供的 SQL Fiddle 示例来检查架构。

问题:

基本上,当我运行以下两个查询时,我试图了解输出的差异:

我改变了 ON 子句的顺序 从 (ON e.ManagerId = m.Id) 到 (ON m.ManagerId = e.Id) 并且我从所需的输出中得到了相反的答案。我认为因为它是自连接,所以顺序无关紧要,因为我是从同一个表中提取信息。

请让我知道我遗漏了什么,并尽可能指出任何方向!提前致谢!

1) 正确的查询以获得期望的输出

Select *
FROM Employee e
INNER JOIN Employee m
ON e.ManagerId = m.Id
WHERE e.Salary > m.Salary

SQL Fiddle Example

2) 查询不正确

Select *
FROM Employee e
INNER JOIN Employee m
ON m.ManagerId = e.Id
WHERE e.Salary > m.Salary

SQL Fiddle Example

最佳答案

功能上顺序无关紧要(因此,“ON e.ManagerId = m.Id”与“ON m.Id = e.ManagerId”相同)。

你在这里做的是加入不同的列,代表不同的东西。

在错误的查询中,您说的是“经理 managerID 与员工 ID 相同”,这是不正确的。经理(如您在表中所列)本身没有经理。

您基本上所做的是反向连接。如果你要交换你的标志 where语句,所以 WHERE e.Salary > m.SalaryWHERE e.Salary < m.Salary你会得到与正确查询相同的答案

关于mysql - 了解自连接 (SQL) 中 ON 子句的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59815474/

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