Hallo, ich versuche, eine Ansicht zu machen, die die (Mafia) Hierarchie (bis zu 5 Ebenen) aus einer einzigen Tabelle für jeden einzelnen Benutzer mit einer zusätzlichen Tabelle enthält füllen Sie den Namen jedes Benutzers aus, das ist die tatsächliche Struktur, ich benutze Fenster azurblau.T-SQL-Hierarchie von zwei Tabellen zu einer einzigen Ansicht
[ 1 ]
/| \
[ 2 ] [3] [4]
/| \ | \
[5] [11] [12] [10] [9]
/\ \
[6] [8] [15]
/ /\ /\
[7] [13] [14] [17] [16]
| |
[19] [18]
/\
[20] [21]
Dies sind die Tabelle, dass ich aus den Daten erhalten:
dbo.userFamily dbo.user
id | user_id | parent_id id_user | name
------------------------ ------------------
1 | 2 | 1 1 | Victor
2 | 3 | 1 2 | Lucifer
3 | 4 | 1 3 | Hellboy
4 | 11 | 2 4 | Spiderman
5 | 12 | 2 5 | Martin
6 | 10 | 4 6 | Superwoman
7 | 9 | 4 7 | Lex Luther
8 | 15 | 9 8 | GodMaster
9 | 17 | 15 9 | Demon
10 | 16 | 15 10 | balou
11 | 6 | 5 11 | Superman
12 | 8 | 5 12 | xman
13 | 7 | 6 13 | hulk
14 | 13 | 8 14 | ironman
15 | 14 | 8 15 | aquaman
16 | 19 | 13 16 | wonderwoman
17 | 20 | 19 17 | batman
18 | 21 | 19 18 | robin
19 | 18 | 14 19 | tiger
20 | 1 | NULL 20 | oscar
Und das ist der Teil, ich habe bisher:
SELECT dbo.UserFamily.id, dbo.UserFamily.user_id, dbo.[User].name AS capo,
dbo.UserFamily.parent_id AS Capo_id, NULL AS underboss,
NULL AS underboss_id, NULL AS consigliere, NULL AS consigliere_id,
NULL AS godfather, NULL AS godfather_id
FROM dbo.UserFamily
INNER JOIN dbo.[User] ON dbo.UserFamily.parent_id = dbo.[User].id_user
ORDER BY dbo.UserFamily.user_id
dies ist die Ansicht ich versuche zu machen (irgendwie fehlt user_id 1, was ich denke, hat damit zu tun, dass es keine parent_id gibt):
id | user_id | capo | capo_id | underboss | underboss_id | etc. | etc.
-----------------------------------------------------------------------------
1 | 2 | Victor | 1 | NULL | NULL | NULL
2 | 3 | Victor | 1 | NULL | NULL | NULL
3 | 4 | Victor | 1 | NULL | NULL | NULL
11 | 6 | Martin | 5 | Lucifer | 2 | Ewald
13 | 7 | Superwoman | 6 | Martin | 5 | Lucifer | 2
12 | 8 | Martin | 5 | Martin | 5 | Lucifer | 2
Aber wie bekomme ich die anderen? Wie der Unterboss usw. bis hin zum Paten? Dies ist die Familienstruktur:
soldier (the user)
capo
underboss
consigliere
godfather
danke das ist extrem cool, aber wenn ich versuche, mit Ihnen zu arbeiten Beispiel, die untere, ist der folgende Fehler: Msg 240, Ebene 16, Zustand 1, Linie 1 Typen nicht zwischen den Anker übereinstimmen und der rekursive Teil in der Spalte "parent_name" der rekursiven Abfrage "cteBosses". –
@EwaldBos Probieren Sie es jetzt aus - für eine rekursive Abfrage müssen die anchor (top) und rekursive (bottom) Queries identische Datentypen in jeder Spalte haben. Ich habe die Abfrage geändert, um die parent_name Spalte in jede Abfrage in ein VARCHAR (100) umzuwandeln , jetzt stimmen die Typen überein. (Ich hatte ein VARCHAR (25) angenommen, aber das stimmt nicht mit der Definition für die Namensspalte in Ihrer Tabelle überein.) –
ja es funktioniert perfekt, vielen Dank für die Erklärung und die Zeit, die Sie eingingen. –