Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    14

    JOIN su tre tabelle con un'altra tabella ad indirizzare come collegarle.

    Ciao a tutti,
    è da un po' di tempo che mi sto battendo con questa cosa e non riesco a trovarne una soluzione.

    Io ho tre tabelle:

    tabella RUOLI:
    RUOLO_ID,
    RUOLO_DESC

    tabella PROFILI:
    PROFILO_ID,
    PROFILO_DESC

    tabella QUALIFICA:
    QUALIFICA_ID,
    QUALIFICA_DESC

    Queste tre tabelle sono collegate tra di loro.
    Il collegamento avviene tramite un'altra tabella COLLEGA_TAB:
    COLL_RUOLO_ID,
    COLL_PROFILO_ID,
    COLL_QUALIFICA_ID

    Devo creare una query che generi l'elenco tra queste quattro tabelle tenendo come traccia la tabella COLLEGA_TAB...

    Ho provato a fare come segue:

    codice:
    SELECT 
    COLLEGA_TAB.COLL_RUOLO_ID AS RUOLOID, 
    COLLEGA_TAB.COLL_PROFILO_ID AS PROFILOID,
    COLLEGA_TAB.COLL_QUALIFICA_ID AS QUALIFICAID,
    RUOLI.RUOLO_DESC AS RUOLO_DESC,
    PROFILI.PROFILO_DESC AS PROFILO_DESC,
    QUALIFICA.DISQUAL_DESC AS DISQUAL_DESC
    FROM 
    COLLEGA_TAB INNER JOIN RUOLI ON COLLEGA_TAB.COLL_RUOLO_ID=RUOLI.RUOLO_ID
    INNER JOIN PROFILI ON COLLEGA_TAB.COLL_PROFILO_ID=PROFILI.PROFILO_ID
    INNER JOIN QUALIFICA ON COLLEGA_TAB.COLL_QUALIFICA_ID=QUALIFICA.QUALIFICA_ID
    La query parte, ma non mi da l'elenco di tutti i record presenti nella cartella COLLEGA_TAB...
    Presumo che il motivo sia che alcuni campi della tabella COLLEGA_TAB siano null e quindi lui li elimina dal risultato... Ma a me servono anche quelli!!! In pratica io vorrei quanto segue
    codice:
    RUOLO_ID RUOLO_DESC PROFILO_ID PROFILO_DESC QUALIFICA_ID QUALIFICA_DESC
    1             xxxxxx          1001          yyyyyyyyy       1554              zzzzzzzzzzzz
    1             xxxxxx           null           null                1532              zzzzzzzzzzzzzz
    2             xxxxxx          2005          yyyyyyyy         null               null
    In pratica record sia completi ma anche quelli con i campi a null.

    Mi riuscite ad aiutare?
    Grazie mille.
    Davide.

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    539
    devi estrarre solo i campi indicati vero ?
    Cattura.jpg
    codice:
    select
    COLL_RUOLO_ID,
    (SELECT distinct RUOLO_DESC FROM RUOLI WHERE RUOLO_ID = COLL_RUOLO_ID ) AS RUOLO_DESC,
    COLL_PROFILO_ID,
    (SELECT distinct PROFILO_DESC FROM PROFILI WHERE PROFILO_ID = COLL_PROFILO_ID ) AS PROFILO_DESC,
    COLL_QUALIFICA_ID,
    (SELECT distinct QUALIFICA_DESC FROM QUALIFICA WHERE QUALIFICA_ID = COLL_QUALIFICA_ID ) AS QUALIFICA_DESC
    from COLLEGA_TAB
    order by RUOLO_DESC, PROFILO_DESC, QUALIFICA_DESC

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    14
    Perfetto! E' proprio quello che cercavo!
    Ne approfitto per chiederti un'altra cosa...
    Avevo provato con questa query e volevo sapere se alla fine era una via corretta...
    Il risultato sembra simile, solo che io ho usato il LEFT OUTER JOIN partendo dalla tabella ruoli...
    Ho notato che la tua query è decisamente più veloce. Quindi utilizzerò sicuramente la tua.
    Grazie mille!

    codice:
    SELECT 
    COLLEGA_TAB.COLL_RUOLO_ID AS RUOLOID, 
    COLLEGA_TAB.COLL_PROFILO_ID AS PROFILOID,
    COLLEGA_TAB.COLL_QUALIFICA_ID AS QUALIFICAID,
    RUOLI.RUOLO_DESC AS RUOLO_DESC,
    PROFILI.PROFILO_DESC AS PROFILO_DESC,
    QUALIFICA.DISQUAL_DESC AS DISQUAL_DESC
    FROM 
    COLLEGA_TAB LEFT OUTER JOIN RUOLI ON COLLEGA_TAB.COLL_RUOLO_ID=RUOLI.RUOLO_ID
    LEFT OUTER JOIN PROFILI ON COLLEGA_TAB.COLL_PROFILO_ID=PROFILI.PROFILO_ID
    LEFT OUTER JOIN QUALIFICA ON COLLEGA_TAB.COLL_QUALIFICA_ID=QUALIFICA.QUALIFICA_ID

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    539
    si la via è giusta, anzi obbligata se devi estrarre più colonne dalle tabelle collegate (da cui la mia domanda ... solo?),
    per la performance, usando le join, potresti creare una view (ma tutto dipende dalla quantità di dati da scorrere 100, 1000, ....)
    la view aiuta il motore del db a predisporre i "percorsi" di ricerca che non devono essere instaurati al momento della query
    (... in parole semplici)

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    14
    Grazie mille per le risposte.
    Effettivamente ho utilizzato questa query per creare una vista così vi faccio delle altre query quando mi servono.

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.