2016-07-06 12 views
-3

Ich habe eine SQL-Tabelle worker mit den Feldern zu erhalten:SQL Query alle Manager

1. id 
2. Name 
3. Manager id 

ich eine Abfrage zu schreiben versuchte, eine Liste der folgenden Felder zu erhalten (‚id‘, ‚name‘,‘ Manager-ID ',' Manager-Name ')

Beachten Sie, dass die Manager-ID auch dem Arbeiter gehört, dh Manager ist auch ein Arbeiter. Außerdem hat ein Manager einen Manager, der wiederum zur selben Tabelle gehört - die Hierarchie kann bis zu n Manager (unbekannt) ansteigen.

Bisher ist diese Abfrage ich

SELECT tab1.user_name, tab1.user_id, tab1.manager_id, tab2.name AS manager_name, 1 AS LEVEL FROM (SELECT tab1.name AS user_name, tab1.id AS user_id, manager_id FROM DB.user tab1 WHERE id = 1 AND active = 1) tab1 LEFT JOIN DB.user tab2 ON tab1.manager_id = tab2.id UNION SELECT tab1.user_name, tab1.user_id, tab1.manager_id, tab2.name AS manager_name, 2 AS LEVEL FROM (SELECT tab1.name AS user_name, tab1.id AS user_id, manager_id FROM DB.user tab1 WHERE manager_id = 1 AND active = 1) tab1 LEFT JOIN DB.user tab2 ON tab1.manager_id = tab2.id UNION SELECT tab1.user_name, tab1.user_id, tab1.manager_id, tab2.name AS manager_name, 3 AS LEVEL FROM (SELECT tab1.name AS user_name, tab1.id AS user_id, manager_id FROM DB.user tab1 WHERE manager_id IN (SELECT tab1.id FROM DB.user tab1 WHERE manager_id = 1 AND active = 1) AND active = 1) tab1 LEFT JOIN DB.user tab2 ON tab1.manager_id = tab2.id

Aber das wird mir Ergebnisse bis 3. Ebene der Hierarchie haben, während ich es brauchen werden selbst zu erweitern und um mich zu holen, um egal was Ebene führt die Verschachtelung existiert.

Kann jemand bitte aushelfen.

+3

was hast du bisher probiert ?? http://stackoverflow.com/questions/16232426/get-all-employee-who-directly-or-indirectly-reports-to-an-employee-with-hierarc – mohan111

+2

Klingt wie Hausaufgaben. Zeig uns, was du versucht hast und wo du gerade feststeckst. –

+0

Entschuldigung, mein Schlechter, ich schrieb die Anforderung falsch, was erforderlich war, um alle Arbeiter unter einem Manager durch die Manager-ID zu bekommen. –

Antwort

1
select w1.id, w1.name, w2.id as manager_id, w2.name as manager_name 
from worker as w1 inner join worker w2 on w1.manager_id = w2.id