Query join su più tabelle

di il
7 risposte

Query join su più tabelle

Salve a tutti,
scusate l'ignoranza, ho una domanda da porvi :
posso creare una query che mi restituisca le riga di una tabelle se ci sono occorrenze in una tabella o un'altra?
Cioè:

tab Clienti
Codice 1 Pippo
Codice 2 Pluto
Codice 3 Orazio

tab Pagamenti
CodCliente 1

tab Fatture
CodCliente 2

quindi Pippo risulta in un pagamento e Pluto in una fattura...posso avere un risultato con Pippo e Pluto senza Orazio?

Grazie anticipatamente

7 Risposte

  • Re: Query join su più tabelle

    Certo. Vi sono diversi modi:

    Puoi usare una INNER JOIN (quindi mostrerà solo i clienti che esistono in tutte le tabelle,

    oppure puoi usare una UNION, ma potrebbe non essere performante (dipende dal tipo di interrogazione)

    Potresti anche usare una SUB-QUERY per ottenere un set di dati così:
    Codice Cliente | Cliente | Pagamenti | Fatture

    Ovviamente se non vuoi vedere Orazio basta discriminare le righe che non hanno né pagamenti, né fatture, ma se fai la INNER JOIN è in automatico.
  • Re: Query join su più tabelle

    Ma la INNER JOIN mi prende solo quelle che stanno sia in pagamenti sia in fatture
  • Re: Query join su più tabelle

    Cioè in entrambe e quindi nessuna
  • Re: Query join su più tabelle

    Chi può dirlo?

    Bisognerebbe sapere come sono relazionate le tue tabelle, cosa che noi non sappiamo.

    Dal mio punto di vista, trovo davvero difficile pensare che vi possano essere dei Pagamenti che non siano riferiti ad Fattura emessa.
    Altrimenti sono Pagamenti riferiti a cosa?
    E poi, i pagamenti sono tutti a saldo, oppure ve ne sono suddivisi in rate?
    ecc. ecc.

    Abbi pazienza, ma con i pochi dati che hai fornito non si può fare un'analisi seria.
  • Re: Query join su più tabelle

    Ok scusate cerco di dare più spiegazioni:
    la tabella Pagamenti e quella Fatture non hanno nessuna relazione poichè i Pagamenti non si riferiscono alle Fatture ma a Pagamenti effettuati.

    la tabella Clienti è in relazione 1 a N sia con la tabella Pagamenti sia con Fatture quindi ho la chiave del Cliente sia in Pagamenti sia in Fatture.

    da codice riesco a dire i Clienti "attivi" cioè chi ha almeno un Pagamento o una Fattura perchè faccio due query e li unifico..la mia domanda è:

    posso non utilizzare il codice ma semplicemente creare una query SQL che mi unifica i risultati?
  • Re: Query join su più tabelle

    Allora fai una UNION, mettendo in LEFT JOIN la tabella Clienti con le altre tabelle.
    Nel caso in cui il cliente abbia sia Pagamenti che Fatture otterrai più righe.
    Qualcosa del genere:
    Select CodCliente , ragionesociale, ... 
    from clienti left join pagamenti 
    on clienti.CodCliente on pagamenti.CodCliente  
    ....
    union
    Select CodCliente , ragionesociale, ...
    from clienti left join fatture 
    on clienti.CodCliente on fatture.CodCliente 
    ....
  • Re: Query join su più tabelle

    Ottimo!!
    Hai preso in pieno ciò che chiedevo..grazie mille tutto già testato e funzionante con un GROUP BY in +
Devi accedere o registrarti per scrivere nel forum
7 risposte