我对自我加入条件感到困惑 例如:我有一张名为' employee'和列为employeeid,name,managerid 只是一个基本语法
select e.employeeid,m.managerid
from employee e
left join employee m
**on e.managerid=m.employeeid
or e.employeeid=m.managerid**
请告诉我**中的文字与
之间的差异答案 0 :(得分:0)
我认为您的查询开头是错误的 - 现在您获得员工的员工ID和经理的经理ID。所以你正在跳过“一代”
我想你想要:
select e.employeeid, m.employeeid
from employee e
left join employee m
on e.managerid=m.employeeid
这将为您提供第一列中的员工ID以及第二列中的经理ID。
第二个是相反的:
select e.employeeid, m.employeeid
from employee e
left join employee m
on e.employeeid=m.managerid
会在第一列中为您提供经理ID,在第二列中为您提供员工的ID。在这种情况下,交换m
和e
别名更有意义,假设它们代表manager
和employee
,但这不会改变结果。
答案 1 :(得分:0)
你的第一部分
e.managerid=m.employeeid
将获得您的下属员工
和第二部分
e.employeeid=m.managerid
会得到你的经理。
在你的查询中选择m.managerid并没有多大意义..如果你查看这个示例数据并查询它可能对你更有意义。
CREATE TABLE employee (
employeeid INT,
managerid INT
)
INSERT INTO employee
VALUES (1,NULL),
(2,1),
(3,1),
(4,2),
(5,4);
SELECT e.employeeid employee,
m.employeeid relatedemployee,
CASE WHEN e.managerid = m.employeeid THEN 'manager'
ELSE 'employee'
END AS relationship
FROM employee e
LEFT JOIN employee m ON e.managerid = m.employeeid
OR e.employeeid = m.managerid
output:
employee relatedemployee relationship
----------- --------------- ------------
1 2 employee
1 3 employee
2 1 manager
2 4 employee
3 1 manager
4 2 manager
4 5 employee
5 4 manager