Domanda
Supponiamo di avere una tabella A:
itemid mark
1 5
2 3
e tabella B:
itemid mark
1 3
3 5
Voglio unirmi ad A*B su A.itemid=B.itemid sia a destra che a sinistra.cioè.risultato:
itemid A.mark B.mark
1 5 3
2 3 NULL
3 NULL 5
C'è un modo per farlo in una query in MySQL?
Soluzione
Si chiama full external join e non è supportato nativamente in MySQL, a giudicare dal suo documenti.Puoi aggirare questa limitazione utilizzando UNION come descritto nei commenti alla pagina a cui mi sono collegato.
[modifica] Dato che altri hanno pubblicato frammenti, ecco qua.Puoi vedere la spiegazione nella pagina collegata.
SELECT *
FROM A LEFT JOIN B ON A.id = B.id
UNION ALL
SELECT *
FROM A RIGHT JOIN B ON A.id = B.id
WHERE A.id IS NULL
Altri suggerimenti
Potrebbe fare un po' di lavoro, ma ecco alcuni sql
select distinct T.itemid, A.mark as "A.mark", B.mark as "B.mark"
from (select * from A union select * from B) T
left join A on T.itemid = A.itemid
left join B on T.itemid = B.itemid;
Questo si basa sul join sinistro, che restituisce tutte le righe nella tabella originale (in questo caso si tratta della tabella di sottoselezione T).Se non ci sono corrispondenze nella tabella unita, imposterà la colonna su NULL.
Questo funziona per me su SQL Server:
select isnull(a.id, b.id), a.mark, b.mark
from a
full outer join b on b.id = a.id