Ich habe nur die Spalten in meiner Tabelle enthalten, die sich ziemlich auf diese beziehen, also bitte über die fehlenden Spalten in Benutzer- und Adresstabellen.JOIN-Anweisung oder ein anderer Ansatz
Um einen kurzen Überblick über das System zu geben. Der "Distributor" ist hier die Hauptverbindung, sie sind an der Spitze des Rollenbaums. Um einen Manager zu erstellen, müssen Sie sie an einen Verteiler binden, daher die DistributorManagerRelationship-Tabelle. Wenn ein Repräsentant erstellt wird, muss er an einen Manager gebunden sein, und dieser Manager kann nur ein Manager sein, der dem ausgewählten Distributor zugeordnet ist. In der folgenden Tabelle ist Live Labs der einzige Distributor, der Repräsentanten erstellen kann, da es Manager unter diesem Account gibt.
Adresstabelle
addressId firstName lastName companyName
82 Mary Mertens IRON Co.
83 John Smith Live Labs
84 Lauren Cole NULL
85 Sam Little NULL
86 Wayne Brady NULL
87 Ronald Foster NULL
88 Shawn Wood NULL
Benutzer Tabelle
userId active username role addressId
19 1 mary distributor 82
20 1 john distributor 83
21 1 lauren manager 84
22 1 sam manager 85
23 1 wayne manager 86
24 1 ronald representative 87
25 1 shawn representative 88
DistributorManagerRelationship
distributorId managerId
20 21
20 22
20 23
ManagerRepRelationship
repId managerId
24 21
24 22
25 22
Hier ist das Problem, das ich habe. Wenn ein Distributor angemeldet ist und alle Benutzer unter ihm (seine Manager und Mitarbeiter) sieht, greift die SQL-Anweisung nur auf Repräsentanten und Manager zu, die eine Beziehung in der ManagerRepRelationship-Tabelle haben. Also zum Beispiel.
SELECT DISTINCT Users.userId, Users.role, Users.username, Address.firstName, Address.lastName
FROM Users
JOIN Address
ON Users.addressId=Address.addressId
JOIN ManagerRepRelationship
ON Users.userId=ManagerRepRelationship.repId
OR Users.userId=ManagerRepRelationship.managerId
JOIN DistributorManagerRelationship
ON Users.userId=DistributorManagerRelationship.managerId
OR ManagerRepRelationship.managerId=DistributorManagerRelationship.managerId
WHERE DistributorManagerRelationship.distributorId=20 AND Users.userId!=20 ORDER BY Address.lastName
Die obige SQL-Anweisung werden alle Wiederholungen und Manager mit Live-Labs assoziiert Rückkehr AUSSER userId 23 (Wayne Brady). Ich verstehe, warum das so ist, weil Wayne nicht mit den Parametern des JOIN übereinstimmt, weil ihm ein Vertreter fehlt. Ich habe diese SQL-Anweisung seit Stunden gekämpft und ich kann es nicht richtig machen. Das Ergebnis, das ich möchte, sind alle Manager und Mitarbeiter, die in diesem Fall an Live Labs gebunden sind, auch wenn in der Tabelle ManagerRepRelationship keine Beziehung vorhanden ist. Vielleicht muss ich zwei verschiedene JOIN-Abfragen kombinieren? Ich stecke fest.
Ich hoffe, ich habe es gut gemacht, dies zu erklären, bitte kommentiere, wenn ich nichts klar genug gemacht habe.
eine Datenbank-Engine Wählen Sie bitte , ist das MySQL ** oder ** SQL Server? – DavidG
Taylor, das riecht nach links –