sql funzione ricorsiva - per trovare i responsabili
-
27-09-2019 - |
Domanda
Diciamo che ho la seguente tabella
User_ID Manager_ID
---------------------
Linda Jacob
Mark Linda
Kevin Linda
Steve Mark
John Kevin
In pratica il requisito è quello di tirare tutti i responsabili sotto l'user_id che si sta cercando. Così, per esempio se io mando a 'Linda' allora dovrebbe tornare a me:
'Mark', 'Kevin', 'Steve', 'John'
o se io mando a 'Mark' allora dovrebbe tornare a me:
Steve
Ho sentito parlare di funzione ricorsiva, ma non sono sicuro di come fare questo. Qualsiasi aiuto sarebbe apprezzato.
Soluzione
Usa:
WITH hieararchy AS (
SELECT t.user_id
FROM YOUR_TABLE t
WHERE t.manager_id = 'Linda'
UNION ALL
SELECT t.user_id
FROM YOUR_TABLE t
JOIN hierarchy h ON h.user_id = t.manager_id)
SELECT x.*
FROM hierarchy x
di risultati:
user_id
--------
Mark
Kevin
John
Steve
Scripts:
CREATE TABLE [dbo].[YOUR_TABLE](
[user_id] [varchar](50) NOT NULL,
[manager_id] [varchar](50) NOT NULL
)
INSERT INTO YOUR_TABLE VALUES ('Linda','Jacob')
INSERT INTO YOUR_TABLE VALUES ('Mark','Linda')
INSERT INTO YOUR_TABLE VALUES ('Kevin','Linda')
INSERT INTO YOUR_TABLE VALUES ('Steve','Mark')
INSERT INTO YOUR_TABLE VALUES ('John','Kevin')
Altri suggerimenti
L'esempio di codice da ricorsive Query Uso espressioni di tabella comuni su MSDN mostra esattamente questo.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow