SQLite hat nur INNER und LEFT JOIN.FULL OUTER JOIN mit SQLite
Gibt es eine Möglichkeit, einen FULL OUTER JOIN mit SQLite zu machen?
SQLite hat nur INNER und LEFT JOIN.FULL OUTER JOIN mit SQLite
Gibt es eine Möglichkeit, einen FULL OUTER JOIN mit SQLite zu machen?
Ja, siehe das Beispiel unter Wikipedia.
SELECT employee.*, department.*
FROM employee
LEFT JOIN department
ON employee.DepartmentID = department.DepartmentID
UNION ALL
SELECT employee.*, department.*
FROM department
LEFT JOIN employee
ON employee.DepartmentID = department.DepartmentID
WHERE employee.DepartmentID IS NULL
Jonathan Leffler Kommentar Folgen, hier ist eine alternative Antwort auf die von Mark Byers':
SELECT * FROM table_name_1 LEFT OUTER JOIN table_name_2 ON id_1 = id_2
UNION
SELECT * FROM table_name_2 LEFT OUTER JOIN table_name_1 ON id_1 = id_2
here Siehe Quelle und weitere SQLite Beispiele.
Ich denke, WHERE employee.DepartmentID IS NULL ist ein Muss, obwohl Sie nichts dagegen haben, Duplikate Zeile – Xenione
zu bekommen Wenn ich nicht irre, sollte dies das gleiche Ergebnis haben, wird die UNION doppelte Datensätze übereinstimmen, ist aber weniger effizient als die UNION ALLE. –
UNION (_without_ ALL) entfernt doppelte Zeilen – cowbert
Das Wikipedia-Beispiel bildet eine "UNION" von drei Abfragen, wobei Ihr Beispiel nur zwei enthält. Kannst du bitte den Unterschied erklären? –
@GrahamBorland: Der Code in meiner Antwort wurde aus Wikipedia genommen. Ich denke Wikipedia wurde bearbeitet, seit ich gepostet habe. Der Unterschied besteht darin, dass sie einen inneren Join und zwei Selects verwenden, um die nicht übereinstimmenden Datensätze zu erhalten (einen für jede Tabelle). Die Abfrage in meiner Antwort kombiniert den inneren Join und einen der Selects zu einem linken Join. Es ist (A) + (B) + (C) verglichen mit (A + B) + (C). –
Ist dies noch der Weg mit der neuesten SQLite (3.7.x) oder kann ein Standard OUTER JOIN verwendet werden? – 01es