CTE Recursivas2

22/02/2008 - 00:06 por daniel | Informe spam
Hola, quisiera saber quien me pede ayudar a comprender como funciona esta
CTE recursiva y como va obteniendo los datos, por ejemplo:

CREATE TABLE Empleados
(
Nombre nvarchar(50),
ID int Primary Key
Jefe int
)
INSERT INTO Empleados VALUES ('Ricardo',1,NULL)
INSERT INTO Empleados VALUES ('Samuel',2,1)
INSERT INTO Empleados VALUES ('Clemente',3,2)
INSERT INTO Empleados VALUES ('Mario',4,2)
INSERT INTO Empleados VALUES ('Gabriel',5,4)
INSERT INTO Empleados VALUES ('Karen',6,1)
INSERT INTO Empleados VALUES ('Ramon',7,5)
GO

WITH CTERecusiva(Nombre,ID,Jefe) AS
(
SELECT Nombre, ID, Jefe FROM Empleados WHERE ID = 2

UNION ALL

SELECT Nombre, ID, Jefe FROM Empleados P
INNER JOIN CTERecursiva R ON R.ID = P.Jefe
)
SELECT cteR.Nombre as Empleado, e.Empleado as Jefe FROM CTERecursiva cteR
INNER JOIN Empleados e ON cteR.Jefe = e.ID
GO


El cual devuelve el siguiente resultado:

Empleado | Jefe
-
Samuel Ricardo
Clemente Samuel
Mario Samuel
Gabriel Mario
Ramon Gabriel


Y no entiendo como funciona, como va obteniendo los datos, si alguien me
puede explicar, GRACIAS.
 

Leer las respuestas

#1 Alejandro Mesa
22/02/2008 - 01:01 | Informe spam
Daniel,

Solo el resultado de cada pasada es tomado en cuenta para la proxima.

SELECT Nombre, ID, Jefe FROM Empleados WHERE ID = 2

INSERT INTO Empleados VALUES ('Samuel',2,1)

SELECT Nombre, ID, Jefe FROM Empleados P
INNER JOIN CTERecursiva R ON R.ID = P.Jefe

INSERT INTO Empleados VALUES ('Clemente',3,2)
INSERT INTO Empleados VALUES ('Mario',4,2)

SELECT Nombre, ID, Jefe FROM Empleados P
INNER JOIN CTERecursiva R ON R.ID = P.Jefe

INSERT INTO Empleados VALUES ('Gabriel',5,4)

SELECT Nombre, ID, Jefe FROM Empleados P
INNER JOIN CTERecursiva R ON R.ID = P.Jefe

INSERT INTO Empleados VALUES ('Ramon',7,5)



Si ahora los unes todos, entonces obtienes:

Empleado | Jefe
-
Samuel Ricardo < 2
Clemente Samuel < 3
Mario Samuel < 4
Gabriel Mario < 5
Ramon Gabriel < 7




AMB

"daniel" wrote:

Hola, quisiera saber quien me pede ayudar a comprender como funciona esta
CTE recursiva y como va obteniendo los datos, por ejemplo:

CREATE TABLE Empleados
(
Nombre nvarchar(50),
ID int Primary Key
Jefe int
)
INSERT INTO Empleados VALUES ('Ricardo',1,NULL)
INSERT INTO Empleados VALUES ('Samuel',2,1)
INSERT INTO Empleados VALUES ('Clemente',3,2)
INSERT INTO Empleados VALUES ('Mario',4,2)
INSERT INTO Empleados VALUES ('Gabriel',5,4)
INSERT INTO Empleados VALUES ('Karen',6,1)
INSERT INTO Empleados VALUES ('Ramon',7,5)
GO

WITH CTERecusiva(Nombre,ID,Jefe) AS
(
SELECT Nombre, ID, Jefe FROM Empleados WHERE ID = 2

UNION ALL

SELECT Nombre, ID, Jefe FROM Empleados P
INNER JOIN CTERecursiva R ON R.ID = P.Jefe
)
SELECT cteR.Nombre as Empleado, e.Empleado as Jefe FROM CTERecursiva cteR
INNER JOIN Empleados e ON cteR.Jefe = e.ID
GO


El cual devuelve el siguiente resultado:

Empleado | Jefe
-
Samuel Ricardo
Clemente Samuel
Mario Samuel
Gabriel Mario
Ramon Gabriel


Y no entiendo como funciona, como va obteniendo los datos, si alguien me
puede explicar, GRACIAS.


Preguntas similares