Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412

    Prelevare il valore della main query all'interno della subquery

    Salve, avrei un problema da porvi (come al solito )
    In pratica devo prendere da un database tutti gli articoli e calcolarne le unità vendute basandomi su quanto memorizzato nella tabella acquisti.

    La tabella articoli è molto semplice:
    id nome prezzo descrizione
    1 scarpe nike 49.89 blabla
    2 scarpe adidas 35.99 blablabla




    La tabella acquisti è:
    id idArticolo quantita prezzo
    324 1 1 50
    325 2 2 36.99
    326 1 3 50



    Se ben vediamo quindi c'è una relazione 1 a molti che all'interno di una query non saprei proprio come gestire

    alla fine deve uscirmi questo risultato
    idArticolo quantita nome
    1 4 scarpe nike
    2 2 scarpe adidas



    Allora ho pensato a questa query
    SELECT * FROM articoli
    left join acquisti on acquisti.idArticolo=articoli.id
    left join (Select SUM(quantita) FROM acquisti WHERE acquisti.idArticolo=articoli.id)
    group by articoli.id


    Il problema risiede nella clausola evidenziata in rosso. Infatti articoli.id nonostante sia un parametro presente nella main query, non viene riconosicuto all'interno della subquery. Come si risolve?
    Ultima modifica di American; 28-08-2014 a 16:46

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    la butto lì, ma non sono sicurissimo
    codice:
    SELECT *, SUM(quantita) as SOMMA FROM articoli 
    left join acquisti on acquisti.idArticolo=articoli.id
    group by acquisti.IdArticolo

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Si così funziona, in effetti avevo snellito l'esempio rispetto al problema reale.
    In pratica nella mia situazione devo tenere conto di un ulteriore colonna, ovvero, quella dei rifornimenti.

    L'obiettivo è quello di calcolare la disponibilità di un prodotto in base ai rifornimenti e agli acquisti, effettuando quindi le opportune operazioni.

    In pratica entra in gioco quest'altra tabella rifornimenti
    id idArticolo quantita
    424 1 (nike) 10
    425 2 (adidas) 9


    alche ho pensato di fare
    SELECT *, SUM(rifornimenti.quantita - acquisti.quantita) as disponibilita
    FROM articoli
    join rifornimenti on rifornimenti.idArticolo=articoli.id
    left join acquisti on acquisti.idArticolo=articoli.id
    group by articoli.id

    il risultato è che risultano disponibili 16 scarpe nike e 7 adidas
    invece dovrei trovarmi:
    nike (10 rifornim. -4 acquisti) = 6 disponibili
    adidas (9 rifornim. -2 acquisti) = 7 disponibili

    Da notare che il risultato di adidas è giusto unicamente perchè nella tabella acquisti è riportato un'unica volta a differenza di nike che ha due referenze
    Ultima modifica di American; 28-08-2014 a 18:05

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    prova un po'
    codice:
    SELECT A.*, 
    	((select SUM(quantita_rif) as SommaC 
    	FROM test_rifornimenti 
    	where id_articolo = A.idarticolo 
    	group by id_articolo) - 
    	(select SUM(quantita) as SommaB 
    	FROM test_quantita 
    	where id_articolo = A.idarticolo 
    	Group BY id_articolo)) as Diff
    FROM test_articolo A

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    funziona grazie!

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Prego :-)

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.