Zvoni
Erfahrenes Mitglied
Mahlzeit.
Bin letztens auf den Umstand gestossen, dass es (populäre) DBMS gibt, welche out-of-the-box keinen Full Outer Join unterstützen.
namentlich zu erwähnen sind SQLite und MySQL.
Also habe ich mir einen Workaround erarbeitet (Beispiel-Code ist für SQLite)
Hier der Workaround für den FULL OUTER JOIN. Der Trick ist einen DISTINCT UNION auf beide beteiligte Tabellen zu erstellen, welche man als "Master" benutzt, an welche man zwei LEFT JOIN's hängt
Ergibt:
Bin letztens auf den Umstand gestossen, dass es (populäre) DBMS gibt, welche out-of-the-box keinen Full Outer Join unterstützen.
namentlich zu erwähnen sind SQLite und MySQL.
Also habe ich mir einen Workaround erarbeitet (Beispiel-Code ist für SQLite)
SQL:
CREATE TABLE "tbl_left" (
"ID" INTEGER NOT NULL UNIQUE,
"ValueLeft" TEXT,
PRIMARY KEY("ID" AUTOINCREMENT)
);
CREATE TABLE "tbl_right" (
"ID" INTEGER NOT NULL UNIQUE,
"ValueRight" TEXT,
PRIMARY KEY("ID" AUTOINCREMENT)
);
/*Testdaten für beide Tabellen*/
INSERT INTO tbl_right VALUES (2,'test 2'),(3,'test 3'),(4,'test 4'),(5,'test 5'),(7,'test 7'),(8,'test 8'),(10,'test 10');
INSERT INTO tbl_left VALUES (1,'test 1'),(2,'test 2'),(4,'test 4'),(5,'test 5'),(6,'test 6'),(8,'test 8'),(9,'test 9'),(10,'test 10')
SQL:
SELECT l2.ID As LeftID, l2.ValueLeft, r2.ID AS RightID, r2.ValueRight FROM
(SELECT DISTINCT l.ID As ID FROM tbl_left As l UNION SELECT r.ID AS ID FROM tbl_right As r) As C
LEFT JOIN tbl_left as l2 ON C.ID=l2.ID
LEFT JOIN tbl_right As r2 ON r2.ID=C.ID
ORDER BY c.ID
LeftID | ValueLeft | RightID | ValueRight |
---|---|---|---|
1 | test 1 | ||
2 | test 2 | 2 | test 2 |
3 | test 3 | ||
4 | test 4 | 4 | test 4 |
5 | test 5 | 5 | test 5 |
6 | test 6 | ||
7 | test 7 | ||
8 | test 8 | 8 | test 8 |
9 | test 9 | ||
10 | test 10 | 10 | test 10 |