我有一个名为Staffs的表,它的列名称是id,name,phone,manager_id
当我执行自联接查询时,它将给出错误的输出。请告诉我
# id, name, phone, manager_id
'1', 'test1', '9089', NULL
'2', 'test2', '6877', '1'
'3', 'test3', '3656', '2'
'4', 'test4', '4324', '2'
'5', 'test5', '90', '3'
'6', 'test6', '5464', '4'
'7', 'test7', '5626', '3'
值在人员表中
我尝试了什么
select e.name as employee,m.name as manager
from staffs e
inner join staffs m
on m.id=e.id
order by manager
它给出错误的输出
# employee, manager
'test1', 'test1'
'test2', 'test2'
'test3', 'test3'
'test4', 'test4'
'test5', 'test5'
'test6', 'test6'
'test7', 'test7'
答案 0 :(得分:1)
您的查询应如下所示:
SELECT e.name as employee, m.name as manager
FROM staffs e LEFT JOIN staffs m ON e.manager_id = m.id
ORDER BY m.name ASC
您使用e.id = m.id
将每个员工与自己联系在一起。但是,您想显示每个员工的经理,因此必须使用e.manager_id = m.id
。通过使用LEFT JOIN
,您可以显示所有带有管理员名称的记录,也可以不显示管理员名称(如果是管理员本身)。