Verzwickte JOIN Abfrage
-
Ich möchte aus 2 + x Tabellen Daten per JOIN abfragen. Dabei enthält Tabelle a eine Spalte id, die aufsteigend numeriert ist. Tabelle b enthält ebenfalls eine Spalte id, die aufsteigend numeriert ist. Jetzt kommen eine beliebige Anzahl an Tabellen (nehmen wir an, 3 (c,d,e), die jeweils eine Spalte aid haben (FK a.id) und bid (FK b.id). in aid und bid können Werte mehrmals auftreten.
Ich möchte erreichen, dass ich eine große Tabelle aus diesen einzelnen Tabellen automatisch erstellen kann. Dabei sollen die Tabellen c,d,e so an a und b angehängt werden, dass ich eine auflistung von a.id erhalte, mit den unterpunkten b.id und den Werten c.id, d.id und e.id. In etwa so:
a.id || b.id || c.aid | c.bid || d.aid | d.bid || ... ------++------++-------+-------++-------+-------++- 1 || NULL || 1 | NULL || 1 | NULL || ... 2 || NULL || 2 | NULL || NULL | NULL || ... 2 || 1 || NULL | NULL || 2 | 1 || ... 2 || 2 || NULL | NULL || 2 | 2 || ... 3 || NULL || 3 | NULL || 3 | NULL || ... 3 || 2 || 3 | 2 || 3 | 2 || ... 3 || 3 || 3 | 3 || 3 | 3 || ... 4 || NULL || 4 | NULL || 4 | NULL || ... 4 || 4 || 4 | 4 || 4 | 4 || ...
Kann ich das mit einer automatisch generierbaren JOIN-Anweisung erreichen und wenn ja, wie?
Hintergrund ist, dass die Anzahl der anzuhängenden Tabellen quasi unbegrenzt ist.Ich hatte die Idee, dass ich zunächst die Tabellen c,d,e.. FULL JOINe, sodass aid und bid in der gleichen Zeile stehen, per Aggregatfunktion hole ich mir aid und bid in eine Spalte, und darüber Joine ich das Resultat mit a und b. Aber bisher ist es mir nicht gelungen, eine SELECT ... FROM ... LEFT JOIN (SELECT ... FROM ... FULL JOIN ... FULL JOIN ...) Syntax aufzustellen.
-
Hallo,
ein Subselect macht im JOIN auch keinen Sinn. Das würde den Sinn vo JOIN komplett außer Kraft setzen. Du kannst aber im JOIN joinen:
SELECT * FROM a INNER JOIN (b INNER JOIN c ON (b.id=c.id)) ON (b.id=a.id))
... oder so ähnlich. Hab grad kein Beispiel zur Hand. Such mal nach "Verschachtelten Joins" oder "assoziativen Joins"
VlG