Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: Sql - Full Outer Join

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    61

    Sql - Full Outer Join

    Salve ho un problema con la FULL OUTER JOIN

    ho eseguito una semplice full outer join tra due tabelle A e B (FROM A FULL OUTER JOIN B ON....)

    questa è parte della query...

    SELECT A.ABI,B.ABI,A.NAG,B.NAG
    FROM A
    FULL OUTER JOIN B
    ON A.ABI = B.ABI
    AND A.NAG = B.NAG

    WHERE A.ABI = 8899




    le due tabelle sono speculari come struttura dati.Nella select mi tiro fuori in parallelo i campi della tabella A e B.
    Il mio problema è che quando i dati della tabella B non combaciano con i dati della tabella A mi estrae quei campi giustamente NULL,
    ma viceversa se i record sono nella tabella B e non nella A non mi tira fuori proprio il record...come mai?!

  2. #2
    sarà dovuto a questa where

    WHERE A.ABI = 8899

    ?

  3. #3
    FULL OUTER JOIN non e' ne left e ne right ma entrambe.

    Nella tabella B hai una AND e probabilmente e' quella che rispondendo false inibisce l'uscita del record corrispondente.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    61
    ma il mio scopo in fattè avere tutti i record aventi l'abi uguale tra le due tabelle....provo a fare un esmpio

    nella tab A ho

    ABI - NAG

    00123 - 1111
    00123 - 2222
    00123 - 3333

    nella tabella B ho

    00123 - 1111
    00123 - 8888

    se io eseguo la query che ho fatto tirando fuori ABI,A.NAG,B.NAG avro'

    ABI A.NAG B.NAG
    00123 1111 1111
    00123 2222 null
    00123 3333 null

    io vorrei che la mia query mi tirasse fuori anche il record presente solo nella tabella B e vorrei avere quindi la seguente situazione

    ABI A.NAG B.NAG
    00123 1111 1111
    00123 2222 null
    00123 3333 null
    00123 null 8888

  5. #5
    Originariamente inviato da snoopy81
    ma il mio scopo in fattè avere tutti i record aventi l'abi uguale tra le due tabelle....
    e allora a cosa serve la where solo su una tabella?

  6. #6
    Originariamente inviato da optime
    e allora a cosa serve la where solo su una tabella?
    questa query:

    SELECT A.ABI,B.ABI,A.NAG,B.NAG
    FROM A
    FULL OUTER JOIN B ON A.ABI = B.ABI AND A.NAG = B.NAG
    WHERE A.ABI = 8899

    equivale a:

    SELECT A.ABI,B.ABI,A.NAG,B.NAG
    FROM A
    FULL OUTER JOIN B ON A.ABI = B.ABI
    WHERE A.ABI = 8899 AND A.NAG = B.NAG

    ovviamente una o entrambe le condizioni ritornano un false.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    61
    l'unica condizione che puo' essere false è l'uguaglianza dei NAG Pongo la domanda in altro modo...

    tab A

    ABI - NAG
    00123 - 1111
    00123 - 2222
    00123 - 3333

    nella tabella B ho

    ABI NAG
    00123 - 1111
    00123 - 8888

    io voglio ottenere dalla query questo risultato

    ABI A.NAG B.NAG
    00123 1111 1111
    00123 2222 null
    00123 3333 null
    00123 null 8888


    ovvero visualizzare,a parita di ABI, tutti i nag uguali e quelli presenti da una parte e non dall'altra e viceversa.Spero di essere stato chiaro

  8. #8
    ce la facciamo a fare una prova togliendo la where?

  9. #9
    SELECT A.ABI, B.ABI, A.NAG, B.NAG
    FROM A
    FULL OUTER JOIN B ON A.NAG = B.NAG

    se hai la certezza che ABI esista in entrambe le tabelle allora aggiungi:

    WHERE A.ABI = B.ABI

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    61
    io nelle due tabelle posso avere anche abi diversi....ma io ho la necessita di confrontare i nag aventi lo stesso abi....quindi il filtro per abi mi serve

    potrei avere la seguente situazione

    tab A

    ABI - NAG
    00123 - 1111
    00123 - 2222
    00123 - 3333
    00789 - 6589

    nella tabella B ho

    ABI NAG
    00123 - 1111
    00123 - 8888
    00852 - 7896

    io nella join devo calcolare solo l ABI per esempio 00123

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 © 2026 vBulletin Solutions, Inc. All rights reserved.