implementare una full join

ho appena scoperto che in mysql il full join non è implementato...non c'è un modo alternativo per ottenere lo stesso risultato?

cioè io ho 2 tabelle dalle quali devo prendere tutte le righe sia di una che dell'altra anche dove non ci sono corrispondenze...come posso fare?

inviato 10 anni fa
Mandalayawantico
X 0 X

ti serve fare il prodotto cartesiano delle due tabelle?

in questo caso in MySQL si usa il CROSS JOIN

:bye:

risposto 10 anni fa
Andrea Turso
Andrea Turso
96
X 0 X

no il prodotto cartesiano sarebbe eccessivo

mi serve prendere tutte le righe della prima tabella + tutte le righe della seconda e quelle che hanno uguali valori metterle insieme...in pratica un unione

risposto 10 anni fa
Mandalayawantico
X 0 X

Una FULL JOIN può essere simulata facedo una UNION tra una LEFT JOIN e una RIGHT JOIN

trovi maggiori dettagli e altre tecniche alternative qui:

http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ottimo grazie

risposto 10 anni fa
Mandalayawantico
X 0 X

un'altra cosa...ho provato ad usare il primo metodo della union tra il left e il right outer join solo che quando eseguo l'intera query che mi serve per creare una vista il computer carica per parecchi minuti la pagina di phpmyadmin diventa bianca ed alla fine mi riappare la struttura del database con le scritte diverse (con un font diverso) allora io vado a cancellare la vista che ho appena creato e torna tutto normale

può essere un problema di time out? e in caso cosa dovrei modificare? o forse è la query ad essere troppo complessa? la query è la seguente:

create view giacenzavendita (codiceABarre, cod_filiale, quantita, quantita_in_arrivo, data_ultima_vendita, data_ultimo_acquisto, prezzo_di_vendita, prezzo_acquisto, quantita_magazzino) as
select v.codiceABarre, v.cod_filiale, v.quantita, g.quantita_in_arrivo, g.data_ultima_vendita, g.data_ultimo_acquisto, g.prezzo_di_vendita, g.prezzo_acquisto, g.quantita_magazzino

from venditaripulita v
    left outer join giacenza g on v.cod_filiale = g.cod_filiale AND v.codiceABarre = g.codiceABarre

union

select g.codiceABarre, g.cod_filiale, v.quantita, g.quantita_in_arrivo, g.data_ultima_vendita, g.data_ultimo_acquisto, g.prezzo_di_vendita, g.prezzo_acquisto, g.quantita_magazzino

from venditaripulita v
    right outer join giacenza g on v.cod_filiale = g.cod_filiale AND v.codiceABarre = g.codiceABarre

in tutte le tabelle ho creato gli indici per le varie join tranne nella tabella venditaripulita che è una vista e non credo si possa fare

risposto 10 anni fa
Mandalayawantico
X 0 X

se puoi, lancia la query direttamente dal cliet di MySQL da riga di comando

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda