这是员工记录。假设某些员工是其他员工的经理,并且emp_id
列中的manager_id
对其进行了识别。
例如Ram和Laxhman的经理是Gopi,Krishna的经理是Laxhman。
现在我想获得emp_id,emp_name和他的经理名字的记录。
下面是表格
emp_id emp_name manager_id
1 gopi 0
2 Ram 1
3 Laxhman 1
4 krishna 3
是否有人帮助我使用mysql(在单个查询中)对此查询进行排序。
非常感谢提前。
答案 0 :(得分:0)
你需要自己JOIN
表:
SELECT
t.emp_id,
t.emp_name,
t1.emp_name as manager_name
FROM
table1 t
LEFT JOIN table1 t1 ON
(t.manager_id = t1.emp_id);
这将向所有员工展示他们的经理。我使用LEFT JOIN
向没有经理的员工展示。
编辑:(根据我的回答中的PO评论)
我这样说:
SELECT
E.emp_id,
E.emp_name,
M.emp_name as manager_name
FROM
emp_tab as E
LEFT JOIN emp_tab as M
ON
(E.manager_id = M.emp_id);
您有2次emp_tab
- fisrt获取有关员工的数据,其次是获取经理数据。由于表格呈现两次,因此每个表格都需要别名。我使用E
(来自员工)和M
(来自经理)。
在顶部,我展示了员工name
和id
以及经理name
(必须从表格的第二次出现 - M
获得)。
在from中我根据员工表(E
)中的员工经理ID与经理表(M
)中的经理ID来连接表。
我使用LEFT JOIN
来显示没有经理的员工。如果您只需要向经理显示员工,则可以将其替换为INNER JOIN
。
答案 1 :(得分:0)
我认为您想将emp_tab表左键连接到自身:
SELECT emp_tab.emp_id, emp_tab.emp_name, man_tab.emp_name AS man_name
FROM emp_tab AS emp_tab
LEFT JOIN emp_tab AS man_tab ON emp_tab.manager_id=man_tab.emp_id
LEFT JOIN导致您从第一个("左")emp_tab表(引用为emp_tab
)获取每个记录,然后一个匹配(如果存在)到第二个emp_tab表引用为man_tab
。
请注意man_tab
是emp_tab本身的别名,但它仅用于提取管理员的信息。如果我们没有"别名"表格,MySQL(和你)会感到困惑,因为从连接左侧的表格引用的员工信息与从连接右侧的表格引用的经理信息之间存在歧义。有关JOINS的更多信息,请参见此处:SQL JOINS
答案 2 :(得分:0)
您需要使用内部联接来实现此目的。
SELECT e.first_name AS employee, m.first_name AS manager
FROM team e
INNER JOIN team m ON e.manager_id = m.id;