SQLite ha solo INNER e LEFT JOIN.FULL OUTER JOIN con SQLite
C'è un modo per FULL OUTER JOIN con SQLite?
SQLite ha solo INNER e LEFT JOIN.FULL OUTER JOIN con SQLite
C'è un modo per FULL OUTER JOIN con SQLite?
Sì, vedere l'esempio su 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
seguito il commento di Jonathan Leffler, qui è una risposta alternativa a quella di 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
Vedi here per la fonte originale e ulteriori esempi SQLite.
Penso che WHERE employee.DepartmentID IS NULL è un must, anche se non ti dispiace di ottenere duplicati riga – Xenione
Se non sbaglio, questo dovrebbe avere lo stesso risultato, l'UNION abbinerà i record duplicati, ma è meno efficiente del UNIONE TUTTI. –
UNION (_without_ ALL) rimuove le righe duplicate – cowbert
L'esempio di Wikipedia sta formando un 'UNION' di tre query, in cui il tuo esempio ne ha solo due. Puoi spiegare la differenza per favore? –
@GrahamBorland: il codice nella mia risposta è stato preso da Wikipedia. Penso che Wikipedia sia stata modificata da quando ho pubblicato. La differenza è che usano un join interno e due selezioni per ottenere i record non corrispondenti (uno per ogni tabella). La query nella mia risposta combina il join interno e uno dei select in un join sinistro. È (A) + (B) + (C) rispetto a (A + B) + (C). –
Questo è ancora il modo con l'ultimo SQLite (3.7.x) o può essere usato un OUTER JOIN standard? – 01es