|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
[Outer Join] Non capisco una cosa ...
Io ho sempre pensato che una outer join fosse l'unione di una left join (left outer join) e una right join (right outer join) ... non capisco l'ultima where (WHERE employee.DepartmentID IS NULL) della dichiarazione trovata su Wikipedia:
http://en.wikipedia.org/wiki/Join_(SQL)#Full_outer_join Codice:
SELECT *
FROM employee
LEFT JOIN department
ON employee.DepartmentID = department.DepartmentID
UNION
SELECT *
FROM employee
RIGHT JOIN department
ON employee.DepartmentID = department.DepartmentID
WHERE employee.DepartmentID IS NULL
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. Ultima modifica di Matrixbob : 27-10-2009 alle 10:53. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
[PS]
Queste erano le tabelle iniziali:
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
... continuo a non capire, mi sento , anche perchè il risultato di left e right join sono:![]() Come outer join invece esce questo:
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. Ultima modifica di Matrixbob : 27-10-2009 alle 11:16. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Stando a quanto dice il mio libro di bd ("Basi di dati - Modelli e linguaggi di interrogazione - Seconda Edizione", Atzeni-Ceri-Paraboschi-Torlone, McGraw-Hill, 2006) quella parte in neretto che hai preso da wikipedia è inutile (ridondante) perché la "union" elimina i duplicati. Se non lo facesse, come se stessimo facendo una "union all", allora sarebbe necessaria quella parte in neretto perché permette di selezionare solo righe che non appartengono anche al risultato della prima sotto-query.
Comunque la definizione di full outer join che c'è su wikipedia è corretta |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
Quote:
Sia in ENG che ITA trovo quella riga ....
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Beh, ti ho spiegato a cosa serve. Forse non tutti i dbms interpretano union allo stesso modo (nel senso che magari alcuni lo interpretano come "union all") e quindi per sicurezza hanno aggiunto quella riga che assicura l'assenza di duplicati.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:42.











... continuo a non capire, mi sento
, anche perchè il risultato di left e right join sono:









