Sql server 是否更改此存储过程以避免使用交叉应用?
我试着在不同的栏中显示老板和负责人的姓名 我可以用cross apply来做,但我被要求不用它来做,但我真的想不出怎么做 我正在使用Northwind SQL Server数据库,以下是我的代码:Sql server 是否更改此存储过程以避免使用交叉应用?,sql-server,stored-procedures,northwind,Sql Server,Stored Procedures,Northwind,我试着在不同的栏中显示老板和负责人的姓名 我可以用cross apply来做,但我被要求不用它来做,但我真的想不出怎么做 我正在使用Northwind SQL Server数据库,以下是我的代码: CREATE PROCEDURE sp_getBossAndEmployeeNames @bossID NCHAR(5) AS CREATE TABLE #TEMP_BOSSES_AND_EMPLOYEES ( BossFullName VARCHAR(35),
CREATE PROCEDURE sp_getBossAndEmployeeNames
@bossID NCHAR(5)
AS
CREATE TABLE #TEMP_BOSSES_AND_EMPLOYEES
(
BossFullName VARCHAR(35),
EmployeeFullName VARCHAR(35)
)
INSERT INTO #TEMP_BOSSES_AND_EMPLOYEES
SELECT (FirstName + ' ' + LastName) as BossFullName, sub.EmployeeFullName
FROM Employees
CROSS APPLY
(
SELECT (FirstName + ' ' + LastName) as EmployeeFullName FROM Employees WHERE ReportsTo = @bossID
) AS sub
WHERE EmployeeID = @bossID
SELECT * FROM #TEMP_BOSSES_AND_EMPLOYEES
只需使用
内部联接
:
SELECT B.FirstName + ' ' + B.LastName AS BossFullName
, E.FirstName + ' ' + E.LastName AS EmployeeFullName
FROM dbo.Employees B
INNER JOIN dbo.Employees E ON E.ReportsTo = B.id
WHERE B.EmployeeID = @bossID;
据我所知,你甚至不需要临时表。非常感谢,临时表只是为了完成我的任务,但INNER JOIN完成了任务!