Sql 自行加入以获取员工经理姓名
您好,我有一个包含以下列的Employee表Sql 自行加入以获取员工经理姓名,sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,您好,我有一个包含以下列的Employee表 Emp_id, Emp_Name and Mgr_id. 我正在尝试创建一个视图,该视图将列出 Emp\u id、Emp\u name、Mgr\u id和Mgr\u name(通过交叉加入Employee表)。我尝试了外部连接,内部连接等,但我不能得到它的权利 非常感谢您的帮助 CREATE TABLE [dbo].[tblEmployeeDetails]( [emp_id] [bigint] NOT NULL, [emp_name] [nvar
Emp_id, Emp_Name and Mgr_id.
我正在尝试创建一个视图,该视图将列出
Emp\u id、Emp\u name、Mgr\u id和Mgr\u name(通过交叉加入Employee表)。我尝试了外部连接,内部连接等,但我不能得到它的权利
非常感谢您的帮助
CREATE TABLE [dbo].[tblEmployeeDetails](
[emp_id] [bigint] NOT NULL,
[emp_name] [nvarchar](200) NULL,
[emp_mgr_id] [bigint] NULL, CONSTRAINT [PK_tblEmployeeDetails] PRIMARY KEY CLUSTERED (
[emp_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
试试这个,它本身就是一个连接,以获得经理:)
编辑:
如果emp_mgr_id为空,左连接将起作用
CREATE VIEW AS
SELECT e1.emp_Id EmployeeId, e1.emp_name EmployeeName,
e1.emp_mgr_id ManagerId, e2.emp_name AS ManagerName
FROM tblEmployeeDetails e1
LEFT JOIN tblEmployeeDetails e2
ON e1.emp_mgr_id = e2.emp_id
正如Jesse所说,使用自连接:
SELECT
e.emp_id
, e.emp_name
, e.emp_mgr_id
, m.emp_name AS mgr_name
FROM [dbo].[tblEmployeeDetails] e
LEFT JOIN [dbo].[tblEmployeeDetails] m ON e.emp_mgr_id = m.emp_id
试试这个
SELECT Employee.emp_id, Employee.emp_name,Manager.emp_id as Mgr_Id, Manager.emp_name as Mgr_Name
FROM tblEmployeeDetails Employee
LEFT JOIN tblEmployeeDetails Manager ON Employee.emp_mgr_id = Manager.emp_id
此定义使用左外部联接,这意味着即使经理ID为NULL或经理已被删除(如果应用程序允许)的员工也将被列出,其经理属性返回为NULL
如果改为使用内部联接,则只会列出拥有管理者的人员。尝试此操作。.您应该执行左联接
以在表中保留空值
SELECT a.emp_Id EmployeeId, a.emp_name EmployeeName,
a.emp_mgr_id ManagerId, b.emp_name AS ManagerName
FROM tblEmployeeDetails a
LEFT JOIN tblEmployeeDetails b
ON b.emp_mgr_id = b.emp_id
此外,您可能希望让经理及其报告与-
SELECT e2.ename ,count(e1.ename) FROM employee_s e1 LEFT OUTER JOIN employee_s e2
ON e1.manager_id = e2.eid
group by e2.ename;
*下面是链接到SQLFiddle的一个工作示例。
在课堂笔记中回顾“自我加入”的内容,请更新您的问题并提供完整的细节。我们似乎需要猜测您的要求。请提供更多信息,否则我们都会浪费时间。当mgr_id为空时,此查询将不起作用。Left join也不适用于我。由于我有少数情况下,emp IDE中不存在mgr_id。左外部联接或右外部联接应该可以工作,如果不存在,则我们缺少一些设置。很抱歉,使用外部联接可以正常工作。我的join语句错误(而不是e1.emp\U mgr\U id=e2.emp\U id在e1.emp\U id=e2.emp\U mgr\U id上的e1.emp\U id)。当mgr\U id为空时,此查询将不起作用。左join也不适用于我。由于emp_idI中不存在mgr_id的情况很少,很抱歉,它与外部联接一起工作正常。我的join语句错误(而不是e1.emp\U mgr\U id=e2.emp\U id我在e1.emp\U id=e2.emp\U mgr\U id上的e1.emp\U id)。当mgr\U id为空时,此查询将不起作用。然后您只需执行左连接即可:)左连接对我也不起作用。因为我有少数情况下经理id不存在于emp_idyeah中,所以我尝试了这个方法,但是我有少数情况下经理id不存在于emp_id中,并且失败了。如果经理id不存在,它会将null作为经理id。你希望用什么来代替它?请举一些例子。很抱歉,它与外部连接工作正常。我的join语句错误(而不是e1.emp\U mgr\U id=e2.emp\U id我在e1.emp\U id=e2.emp\U mgr\U id上的e1.emp\U id)是的,我尝试过这个,但我有少数情况下,mgr\U id在emp\U id中不存在,并且失败。即使mgr\U id为null或不存在,它也应该工作。如果mgrId不正确/null。它将为Mgr\u Id和Mgr\u Name提供空值。很抱歉,它与外部联接一起工作正常。我的join语句错误(而不是Employee.emp\u mgr\u id=Manager.emp\u id我有Employee.emp\u id=Manager.emp\u mgr\u id)为什么我们从e1而不是从e2获取mgr\u id。
SELECT Employee.emp_id, Employee.emp_name,Manager.emp_id as Mgr_Id, Manager.emp_name as Mgr_Name
FROM tblEmployeeDetails Employee
LEFT JOIN tblEmployeeDetails Manager ON Employee.emp_mgr_id = Manager.emp_id
CREATE VIEW EmployeeWithManager AS
SELECT e.[emp id], e.[emp name], m.[emp id], m.[emp name]
FROM Employee e LEFT JOIN Employee m ON e.[emp mgr id] = m.[emp id]
SELECT a.emp_Id EmployeeId, a.emp_name EmployeeName,
a.emp_mgr_id ManagerId, b.emp_name AS ManagerName
FROM tblEmployeeDetails a
LEFT JOIN tblEmployeeDetails b
ON b.emp_mgr_id = b.emp_id
create view as
(select
e1.empno as PersonID,
e1.ename as PersonName,
e2.empno MANAGER_ID,
e2.ename MANAGER_NAME
from
employees e1 , employees e2
where
e2.empno=e1.mgr)
SELECT e1.empno EmployeeId, e1.ename EmployeeName,
e1.mgr ManagerId, e2.ename AS ManagerName
FROM emp e1, emp e2
where e1.mgr = e2.empno
select E1.EmpId,E1.Name,E2.Name as Manager from Employee E1 left join Employee E2 on E1.ManagerID = E2.EmpId
TableName :Manager
EmpId EmpName ManagerId
1 Monib 4
2 zahir 1
3 Sarfudding NULL
4 Aslam 3
select e.EmpId as EmployeeId,e.EmpName as EmployeeName,e.ManagerId as ManagerId,e1.EmpName as Managername from Manager e
join manager e1 on e.ManagerId=e1.empId
SELECT e2.ename ,count(e1.ename) FROM employee_s e1 LEFT OUTER JOIN employee_s e2
ON e1.manager_id = e2.eid
group by e2.ename;
create table abc(emp_ID int, manager varchar(20) , manager_id int)
emp_ID manager manager_id
1 abc NULL
2 def 1
3 ghi 2
4 klm 3
5 def1 1
6 ghi1 2
7 klm1 3
select a.emp_ID , a.manager emp_name,b.manager manager_name
from abc a
left join abc b
on a.manager_id = b.emp_ID
Result:
emp_ID emp_name manager_name
1 abc NULL
2 def abc
3 ghi def
4 klm ghi
5 def1 abc
6 ghi1 def
7 klm1 ghi
SELECT e1.emp_id, e1.emp_name, e1.mgr_id, e2.emp_name as manager_name
FROM employee e1
JOIN employee e2
ON e1.mgr_id = e2.emp_id
ORDER BY e1.emp_id