Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso fare un FULL OUTER JOIN in MySQL?

Non hai full join in MySQL, ma puoi sicuramente emularli .

Per un campione di codice trascritto da questa domanda di Stack Overflow hai:

Con due tabelle t1, t2:

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id

La query precedente funziona per casi speciali in cui un join esterno completo operazione non produrrebbe righe duplicate. La query sopra dipende da UNION set operatore per rimuovere le righe duplicate introdotte dal modello di query. Possiamo evitare di introdurre righe duplicate utilizzando un anti-join pattern per la seconda query, quindi utilizzare un operatore di insiemi UNION ALL per combinare i due insiemi. Nel caso più generale, in cui un join esterno completo restituirebbe righe duplicate, possiamo farlo:

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
WHERE t1.id IS NULL