Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Join fra più tabelle

  1. #1

    Join fra più tabelle

    Ciao a tutti,

    qualche anima pia sa indicarmi come devo fare per fare una join con tre tabelle...

    fino a due arrivo (è un mio limite lo sò)

    Le tabelle sono:

    1.ordini
    2.ordini_prodotti
    3.ordini_descr_agg

    Nella prima ho il campo:
    ordine_id (chiave)
    ....

    Nella seconda ho i campi:
    ordine_id
    prodotto_id
    ....

    Nella terza ho il campo:
    prodotto_id
    ......


    Questa la query che uso per unire le due prime tabelle ma per la terza come faccio??

    Codice PHP:
    SELECT FROM ordini AS aordini_prodotti AS b WHERE a.ordine_id b.ordine_id
    Questa invece l'ho trovata sulla guida di Html
    Codice PHP:
    FROM t1 JOIN t2 ON t1.col1 t2.col2 LEFT JOIN t3 ON t2.col3 t3.col3 
    ma non sono riuscito ad "interpretarla"; cosa intende per t2.col3 forse tab2.col3 ovvero nel mio esempio ordini_prodotti.prodotto_id = ordini_descr_agg.prodotto.id???

    Grazie per l'eventuale aiuto

  2. #2
    cosi a occhio e croce credo che basti

    Codice PHP:

    where ordini
    .ordine_id ordini_prodotti.ordine_id AND ordini_prodotti.prodotto_id 
    ordini_descr_agg.prodotto_id 
    cosi sono unite tutte e tre, almeno sembra dai nomi, sappici dire

    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  3. #3
    Veramente questa non è una JOIN, ma una select sulla prima tabella controllando i valori nei campi delle altre.

    una join su 3 tabella sarebbe

    SELECT * FROM ordini INNER JOIN ordini_prodotti ON ordini.ordine_id = ordini_prodotti.ordine_id INNER JOIN ordini_descr_agg ON ordini_descr_agg.prodotto_id = ordini_prodotti.prodotto_id WHERE ...

    Due cose sulle JOIN:
    Una join non è una ricerca tra più tabelle, ma un merge, una unione tra i risultati di più tabelle. Quanto ottieni i valori, non li ottieni come fossero il risultato di 3 tabelle separate, ma come una unica riga di una tabella.

    Inoltre, io ho eseguito una INNER JOIN che è diversa da una LEFT o uno RIGHT JOIN:

    INNER JOIN ritorna risultati solo se esiste almeno una riga tra le due tabelle che unisce. Nel tuo esempio tornerebbe solo le righe della tabella ordini che hanno almeno una riga in ordini_prodotti con ordine_id = al proprio che hanno almeno una riga in ordini_descr_agg con prodotto_id = al proprio.

    LEFT JOIN ritorna risultati se esistono righe nella tabella di sinistra che rispettano il WHERE (per esempio facendo SELECT * FROM ordini LEFT JOIN ordini_prodotti ON ordini.ordine_id = ordini_prodotti.ordine_id

    tornerebbe tutte le righe della tabella ordini, con campi null nella parte ordini_prodotti, in più tutte le righe di una INNER JOIN)

    Infine RIGHT JOIN torna i risultati se esistono righe nella tabella di destra che rispettano il WHERE (per esempio facendo SELECT * FROM ordini RIGHT JOIN ordini_prodotti ON ordini.ordine_id = ordini_prodotti.ordine_id

    tornerebbe tutte le righe della tabella ordini_prodotti, con campi null nella parte ordini, in più tutte le righe di una INNER JOIN)

    Spero di essere stato chiaro, ciao a tutti

  4. #4
    infatti volevo un merge tra le tabelle.

    Mi serve per estrarre i dati che mi interessano.

    Ho bisogno di far visualizzare per ogni ordine:

    i dati dell'ordine e del cliente contenuti nella tabella ORDINI;
    i dati dei prodotti (descr., prezzo etc) contenuti nella tabella ORDINI_PRODOTTI;
    ed infine i dati delle descrizioni aggiuntive dei prodotti contenuti nella tabella ORDINI_DESCR_AGG.

    utlizzando la INNER JOIN ottengo tutto.

    Ora la mia domanda è questa come posso raggruppare per ordine e quindi visualizzare ogni singolo ordine con il contenuto dello stesso?

  5. #5

    ho risolto

    Grazie ho risolto,

    avevo reso più complicato del necessario la richiesta.

    Ho fatto una join sulle ultime due tabelle per tirar fuori solo i dati delle descrizioni aggiuntive.

    Grazie ancora

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.