Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [MySQL] JOIN tra 3 tabelle con SUM e DISTINCT

    vengo subito al dunque: ho 2 magazzini (2 tabelle diverse) e devo sommare le disponibilità di ogni magazzino congiungendole ad una terza tabella che contiene i codici (codici). Le tabelle son queste e non ci posso fare niente...

    se eseguo questa query:
    codice:
    SELECT codice, SUM(disponibilita) FROM magazzino GROUP BY magazzino.codice
    risultato SUM dell'articolo diriferimento = 11180 --->OK

    se eseguo questa query:
    codice:
    SELECT codice_barre, SUM(disponibilita) FROM bancali WHERE bancali.bancale>"H" GROUP BY bancali.codice_barre
    risultato SUM dell'articolo di riferimento = 20717 -->OK


    se li metto in una unica query con la terza tabella

    codice:
    SELECT c.codice, c.descrizione, b.codice_barre, SUM(DISTINCT m.disponibilita )mag_uno, SUM(DISTINCT b.disponibilita ) mag_due
    FROM magazzino AS m 
    LEFT JOIN bancali AS b ON (b.bancale > "H")
    INNER JOIN codici AS c ON (b.codice_barre = c.codice_barre) AND (c.codice = m.codice)
    GROUP BY m.codice, b.codice_barre
    il risultato del 2° SUM non è piu' 20717 ma 14409.

    i dati del campo disponibilità della tabella interessata sono:
    6308
    6308
    8101

    il 14409 non è altro che 6308+8101 ... ma a me serve 6308+6308+8101= 20717
    se tolgo il DISTINCT mi esce un numero esagerato...non so più che pesci pigliare...
    grazie a chi mi può aiutare.

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Perche non fai una UNION ?

    SELECT codice as cod, SUM(disponibilita) as dispo FROM magazzino GROUP BY magazzino.codice
    UNION
    SELECT codice_barre as cod, SUM(disponibilita) as dispo FROM bancali WHERE bancali.bancale>"H" GROUP BY bancali.codice_barre
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Perche non fai una UNION ?

    SELECT codice as cod, SUM(disponibilita) as dispo FROM magazzino GROUP BY magazzino.codice
    UNION
    SELECT codice_barre as cod, SUM(disponibilita) as dispo FROM bancali WHERE bancali.bancale>"H" GROUP BY bancali.codice_barre
    grazie, la tua UNION funziona, devo solo lavorarci per ottimizzarlo.


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.