Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400

    [MySQL] Problemi con UPDATE utilizzando SELECT

    Ciao a tutti.

    Non riesco ad aggiornare correttamente una tabella tramite una query UPDATE che richiama una query SELECT.

    Tutti i records della tabella vengono aggiornati da un valore, cioè quello del primo calcolo.

    Ecco la query:
    codice:
    UPDATE tbl_payoff t
    JOIN 
    (
    
    SELECT a1.area, (sum1/sum2)*15000 `totalSum`
    FROM ( 
          SELECT area,
                 COUNT(*) `sum1`
          FROM tbl_sales
          WHERE (YEAR(date_of_sale)='2012')
          GROUP BY area
       )a1
    JOIN 
       ( 
            SELECT area,
                   SUM( Ordinary_Work_hours + Extra_Work_hours ) `sum2`
            FROM tbl_sellers
            WHERE current_year = '2012'
            GROUP BY area
    ) a2
    ON a1.area = a2.area
    ) q
    
    SET payoff = (q.totalSum)
    WHERE 1;
    Come dovrebbe essere:
    codice:
    area	totalSum
    A	157.0681
    B	131.5789
    C	384.6154
    Come invece aggiorna:
    codice:
    area	totalSum
    A	157.0681
    B	157.0681
    C	157.0681
    Cosa sbaglio?
    Grazie

  2. #2
    vedo direttamente il WHERE...

    cosa vorrebbe dire WHERE 1 ???

    Quello e' il where dell'update. e' identico per tutti i record e quindi modifica tutti i record allo stesso modo. Dovresti distinguere i record per area.

    es.: where t.area = a1.area

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Domanda.
    Perchè anzichè salvarti il dato di pay off non lo calcoli "al volo" quando ti serve? C'è qualche impedimento tecnico nascosto?


  4. #4
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    Questa è la soluzione, mancava un'ulteriore join.

    Il problema è che questo dato `pay off ` andrebbe calcolato nel contesto di un'altra query piuttosto complessa, preferisco memorizzare tutto ciò che mi serve in una tabella dedicata.

    Ciao e grazie-

    codice:
    UPDATE tbl_payoff t
    JOIN 
    (
    
    SELECT a1.area, (sum1/sum2)*15000 `totalSum`
    FROM ( 
          SELECT area,
                 COUNT(*) `sum1`
          FROM tbl_sales
          WHERE (YEAR(date_of_sale)='2012')
          GROUP BY area
       )a1
    JOIN 
       ( 
            SELECT area,
                   SUM( Ordinary_Work_hours + Extra_Work_hours ) `sum2`
            FROM tbl_sellers
            WHERE current_year = '2012'
            GROUP BY area
    ) a2
    ON a1.area = a2.area
    ) q
    
    ON t.area = q.area
    
    SET payoff = (q.totalSum);
    
    
    payoff	area	ID_payoff
    157,07	A	1
    131,58	B	2
    384,62	C	3

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.