【发布时间】:2020-11-16 13:15:12
【问题描述】:
我有一张桌子,里面有员工和团队负责人。 我有以下数据
Declare @EMP AS TABLE(EmpID INT, EmpName VARCHAR(100),TeamLeadID INT)
INSERT INTO @EMP(EmpID, EmpName,TeamLeadID) VALUES
(1,'Ramesh',5)
,(2,'Mahesh',3)
,(3,'Vijay',3)
,(4,'Varma',5)
,(5,'Raj',5)
我想列出所有员工以及他们的团队负责人 ID 和姓名。但是当employeeid = teamleadid时,teamleaderid和name应该为空。
结果应该如下。
EmpID EmpName TeamLeadID TeamLeadName
1 Ramesh 5 Raj
2 Mahesh 3 Vijay
3 Vijay NULL NULL
4 Varma 5 Raj
5 Raj NULL NULL
代码如下。
SELECT E.EmpID,E.EmpName,TL.TeamLeadID,TL.EmpName AS TeamLeadName
FROM @Emp E
LEFT JOIN @Emp TL ON E.TeamLeadID = TL.EmpID AND E.EmpID ! = TL.EmpID
有没有其他方法可以重写这段代码并获得更高的性能(主要是不使用Not equal to at E.EmpID ! = TL.EmpID)并且不使用CTE?
【问题讨论】:
-
看来您应该修复数据。某人不能成为他们自己的领导者,因此用户
3不应该为TeamLeadID提供3的值;应该是NULL。 -
仅供参考,在您的示例数据中,您所有的员工都有姓名
'Ramesh'。'Vijay''、'Varma'等是从哪里来的? -
为什么要强加不使用
!=和CTE之类的条件?这两个都是 T-SQL 工具箱中的重要工具,而且它们本身都不会影响性能。在 SQL 中,您应该使用正确的工具正确解决您的问题,然后,如果性能是一个问题,您应该尝试调整您的解决方法。 -
@Larnu,抱歉数据已更正
-
当前查询是否存在性能问题?执行计划是什么样的?请使用Paste the plan分享。
标签: sql-server tsql sql-server-2012