Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

LEFT JOIN a tre tabelle

  1. #1
    marcello1 non è in linea Novello
    Post
    10
    Like Inviati  
    0
    Like Ricevuti  
    0
    buongiorno,
    approfitto della vostra competenza per porvi un quesito:
    ho un programma per la gestione della contabilità che ho impostato su 4 tabelle

    "TABELLA CAPITOLI____TABELLA IDV________TABELLA IDV_PREVENTIVI______TABELLA PREVENTIVI
    id_capitolo__________id_idv_____________id_idv_pre ventivi_____________id_preventivo
    note_capitolo________numero_idv_________ke_idv____ ________________numero_preventivo
    ___________________importo_euro_idv___ke_preventiv i_______________importo_euro_netto
    ___________________ke_capitoli____________________ ______________iva
    __________________________________________________ ___________note_preventivo"

    ho provveduto a compilare la seguente query con left join con due tabelle e mi funziona benissimo:
    "SELECT capitoli.capitolo, idv.numero_idv, idv.importo_euro_idv
    FROM capitoli LEFT JOIN idv ON capitoli.id_capitolo=idv.ke_capitoli;"

    ho provato con la seguente a tre tabelle ma continua a darmi errore e non capisco perchè

    "SELECT capitoli.capitolo, idv.numero_idv, idv.importo_euro_idv, idv_preventivi.ke_idv, PREVENTIVI.numero_preventivo
    FROM capitoli
    LEFT JOIN idv ON capitoli.id_capitolo = idv.ke_capitoli
    left join idv_preventivi on idv.id_idv=idv_preventivi.ke_idv"

    qualcuno sa suggerirmi qualcosa?

  2. #2
    Sgrubak non è in linea Scribacchino
    Post
    595
    Like Inviati  
    10
    Like Ricevuti  
    11
    Nell'ultima Select le colonne [capitoli.capitolo] e [PREVENTIVI.numero_preventivo] sono sbagliate. La prima non esiste, per la seconda non hai incluso nelle Join la tabella [PREVENTIVI]

  3. #3
    L'avatar di gibra
    gibra ora è in linea Very Important Person
    Post
    6,233
    Like Inviati  
    19
    Like Ricevuti  
    11
    Quote Originariamente inviato da marcello1 Visualizza il messaggio
    qualcuno sa suggerirmi qualcosa?
    Dato gli errori macroscopici (nomi mancanti e/o inesistenti) ti consiglio di creare una query usando il QBE di Access con cui è impossibile sbagliare.
    Anche perché, a differenza di tutti gli altri DBMS, quando si creano più JOIN Access richiede l'uso delle parentesi.
    ℹ️ Leggi di più su gibra ...

  4. #4
    marcello1 non è in linea Novello
    Post
    10
    Like Inviati  
    0
    Like Ricevuti  
    0
    si scusa in effetti ho sbagliato a descrivere le tabelle. Riporto quelle giuste

    "TABELLA CAPITOLI__TABELLA IDV______TABELLA IDV_PREVENTIVI__TABELLA PREVENTIVI
    id_capitolo________id_idv____________id_idv_preven tivo________id_preventivo
    capitolo __________numero_idv_______ke_idv________________n umero_preventivo
    note_capitolo______importo_euro_idv___ke_preventiv i__________importo_euro_netto_preventivo
    ________________ke_capitoli_______________________ ________note_preventivo"

    e riporto la query corretta.Qua mi dà l'errore dell'operatore mancante

    SELECT capitoli.capitolo, idv.numero_idv, idv.importo_euro_idv , importo_euro_netto_preventivo
    FROM capitoli LEFT JOIN idv ON capitoli.id_capitolo=idv.ke_capitoli
    LEFT JOIN idv_preventivi on id_idv=ke_idv
    LEFT JOIN preventivi on ke_preventivi=id_preventivo

  5. #5
    marcello1 non è in linea Novello
    Post
    10
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da gibra Visualizza il messaggio
    Dato gli errori macroscopici (nomi mancanti e/o inesistenti) ti consiglio di creare una query usando il QBE di Access con cui è impossibile sbagliare.
    Anche perché, a differenza di tutti gli altri DBMS, quando si creano più JOIN Access richiede l'uso delle parentesi.
    lo farei volentieri ma non so come si gestisce il left join con il QBE di access

  6. #6
    Sgrubak non è in linea Scribacchino
    Post
    595
    Like Inviati  
    10
    Like Ricevuti  
    11
    Prova a leggere questo link.

  7. #7
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    Post
    7,753
    Like Inviati  
    0
    Like Ricevuti  
    2
    Ciao

    L'unica è suddividere la query in 2
    La prima esegue il primo Left Join tra le prime 2 tabelle
    La seconda esegue il left join tra la query appena creata e la terza tabella

    in sql devi creare un query Nidificata

    (non riporto tutti campi ma solo la "macro struttura")
    select a.***, Tabella3.****
    From (select .... from Tabella1.*** Left join Tabella2.**** on Tabella1.****=tabella2.**** ) A Left join tabella3.**** on A.****= Tabella3.****

    Come Vedi il risultato di una Query (quella tra parentesi) viene usata come sorgente per la query principale Equivalente di quello che ti ho descritto in access

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  8. #8
    CarlettoFed non è in linea Scolaretto
    Post
    60
    Like Inviati  
    0
    Like Ricevuti  
    0
    direi che la query è la seguente:
    SELECT CAPITOLI.capitolo, IDV.numero_idv, IDV.importo_euro_idv, PREVENTIVI.importo_euro_netto_preventivo
    FROM ((CAPITOLI INNER JOIN IDV ON CAPITOLI.id_capitolo=IDV.ke_capitoli) INNER JOIN IDV_PREVENTIVI ON IDV.id_idv=IDV_PREVENTIVI.ke_idv) INNER JOIN PREVENTIVI ON IDV_PREVENTIVI.ke_preventivi=PREVENTIVI.id_preventivo;
    
    ma dire che la tabella IDV_PREVENTIVI è superflua e modificherei la struttura del database nel seguente modo:
    https://www.dropbox.com/s/ycu53skh2x...zioni.png?dl=0

  9. #9
    marcello1 non è in linea Novello
    Post
    10
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da CarlettoFed Visualizza il messaggio
    direi che la query è la seguente:
    SELECT CAPITOLI.capitolo, IDV.numero_idv, IDV.importo_euro_idv, PREVENTIVI.importo_euro_netto_preventivo
    FROM ((CAPITOLI INNER JOIN IDV ON CAPITOLI.id_capitolo=IDV.ke_capitoli) INNER JOIN IDV_PREVENTIVI ON IDV.id_idv=IDV_PREVENTIVI.ke_idv) INNER JOIN PREVENTIVI ON IDV_PREVENTIVI.ke_preventivi=PREVENTIVI.id_preventivo;
    
    [/URL]
    ho provato ma con questa query non mi mostra le assegnazioni che ricevo ma che non sono state ancora impegnate. Ed è il motivo per cui vorrei il left join. Con due tabelle ci riesco , ma con tre tabelle non ho capito quale è la struttura della query

  10. #10
    CarlettoFed non è in linea Scolaretto
    Post
    60
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quali sono le "assegnazioni che ricevo ma che non sono state ancora impegnate" ma devi esprimerlo usando i nomi delle tabelle e non diciture generiche.
    La query è la seguente:
    SELECT CAPITOLI.capitolo, IDV.numero_idv, IDV.importo_euro_idv, PREVENTIVI.importo_euro_netto_preventivo
    FROM CAPITOLI LEFT JOIN ((IDV LEFT JOIN IDV_PREVENTIVI ON IDV.id_idv = IDV_PREVENTIVI.ke_idv) LEFT JOIN PREVENTIVI ON IDV_PREVENTIVI.ke_preventivi = PREVENTIVI.id_preventivo) ON CAPITOLI.id_capitolo = IDV.ke_capitoli;
    

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Risposte: 15
    Ultimo Post: 19-07-2015, 14:04
  2. Left Join multitabella
    Da ecommerciando nel forum MySQL
    Risposte: 7
    Ultimo Post: 24-04-2015, 11:18
  3. query con left JOIN?
    Da fabietto10 nel forum Microsoft Access
    Risposte: 16
    Ultimo Post: 15-09-2014, 09:24
  4. Gestione risultati LEFT Join
    Da hayabusa_65 nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 28-10-2011, 18:16
  5. Left join
    Da sly185 nel forum Visual Basic 6
    Risposte: 3
    Ultimo Post: 19-11-2004, 14:30