Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Doppia join - sql

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87

    Doppia join - sql

    Ciao a tutti, avrei un po' di problemi per quanto riguarda la join in se, vi riporto il testo di un esercizio,abbiamo due tabelle


    aeroporto(città*, nazione, numpiste)
    volo(cittàArr,cittàPart, Idvolo,giornosett,tipoaereo)


    Mi si richiede di individuare gli aeroporti da cui partono voli internazionali.La soluzione è:


    select v.cittàPart
    from (aeroporto as a1 join volo as v on a1.città=v.cittàPart) join aeroporto as a2 on a2.città=v.cittàArr
    where a1.nazione <> a2.nazione


    Innanzitutto, a livello di tabelle cosa succede? Non so se a1 si unisce a v e il risultato si unisce ad a2 oppure se prima a1 si unisce a v poi v(completo ed inalterato rispetto all'originale tabella volo) si unisce ad a2 e solo allora si crea una tabellona che contenga il risultato dell'unione "delle due unioni" che abbiamo fatto un momento prima.


    Seconda cosa, nessuno me l'ha spiegato a lezione ma è giusto impostare così la join? Cioè se avessi fatto, nella parentesi ( volo as v join aeroporto as a1 on v.cittàPart=a1.città) cambiava qualcosa?


    Grazie mille

  2. #2
    per capirci, (semplifico)

    con una join, le tabelle si uniscono (prodotto cartesiano) e poi si lasciano solo i record che soddisfano la condizione di join.

    Nel tuo caso i record che soddisfano questa condizione : a1.città=v.cittàPart


    Con una join di quel tipo scambiare l'ordine delle tabelle non ha effetto. Avresti un effetto sensibile nel caso in cui fosse una LEFT o RIGHT join
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    Grazie, il problema però è che le tabelle sono due è le join pure, quindi fa due volte una join tra le stesse tabelle ma a condizioni diverse. Ti dico quello che secondo me succede...a1 join v quindi, in pratica, avremo una tabella che contiene solo i valori presi laddove c'è corrispondenza tra città e città di partenza. Fatto ciò riparte da zero ma stavolta inserendo in una seconda tabellona solo i valori dove si è trovata corrispondenza tra città e città di arrivo. A questo punto, per come la mia mente distorta vede il mondo, dovrei aver due tabellone una con sole città di partenza e una con sole città di arrivo. A questo punto vengono unite in maniera indiscriminata e tramite la where filtriamo scegliendo solo le righe che hanno a1.nazione e a2.nazione diverse

  4. #4
    se ti serve per capire grosso modo come l'interrogazione e' svolta anche la tua interpretazione puo' andar bene.


    Se la domanda e' nel dettaglio come un dbms fa a restituire un risultato, questo e' un argomento piu' complesso
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    Mi interessa solo capire grosso modo come funziona la join doppia. La mia preoccupazione era che potesse avvenire un'ulteriore intersezione di risultati tipo a1 joina v e quel che ne esce joina qualcos'altro :| detto proprio terra terra, non so se rendo l'idea

  6. #6
    viene fatto il join tra aereoporto , citta, aereoporto
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    Mmm e quale delle due risposte che ho dato si avvicina di più a quello che dici? L'ultima o la penultima? (Esclusa questa)

  8. #8
    direi questa

    Grazie, il problema però è che le tabelle sono due è le join pure, quindi fa due volte una join tra le stesse tabelle ma a condizioni diverse. Ti dico quello che secondo me succede...a1 join v quindi, in pratica, avremo una tabella che contiene solo i valori presi laddove c'è corrispondenza tra città e città di partenza. Fatto ciò riparte da zero ma stavolta inserendo in una seconda tabellona solo i valori dove si è trovata corrispondenza tra città e città di arrivo. A questo punto, per come la mia mente distorta vede il mondo, dovrei aver due tabellone una con sole città di partenza e una con sole città di arrivo. A questo punto vengono unite in maniera indiscriminata e tramite la where filtriamo scegliendo solo le righe che hanno a1.nazione e a2.nazione diverse
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    Grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.