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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top