Domanda

C'è un modo per aggiornare più righe con valori diversi per ogni fila utilizzando una singola query SQL? Devo aggiornare una colum in più righe di dati diversi. Utilizzando query di aggiornamento individuali per ogni riga sembra eccessivo quindi se è possibile vorrei consolidare questo processo in una singola istruzione SQL o almeno ridurre il numero di query richiesto.

Sto usando PHP con Zend Framework e MySql.

È stato utile?

Soluzione

Crea una tabella temporanea e riempirlo con:

CREATE TEMPORARY TABLE temptable (id INTEGER, VALUE VARCHAR(200))

INSERT
INTO temptable
VALUES
  ('1', 'val1'),
  ('2', 'val2'),
  ('3', 'val3'),
  ('4', 'val4')

Poi problema:

UPDATE
  mytable m, temptable t
SET m.value = t.value
WHERE m.id = t.id

Altri suggerimenti

Non so su MySQL in particolare, ma di aggiornare più righe sulla base di una SELECT, o di un'unione di più seleziona, lo farei

UPDATE U
SET MyColumn = T.OtherColumn
FROM MyUpdateTable AS U
     JOIN
     (
         SELECT [OtherColumn] = OtherColumn1
         FROM MyOtherTable1
         WHERE ...
         UNION
         SELECT OtherColumn2
         FROM MyOtherTable2
         WHERE ...
     ) AS T
         ON T.ID = U.ID

Aggiornamento 2014/10/28, convertito a lavorare per MySQL:

UPDATE MyUpdateTable AS U
    JOIN
    (
        SELECT [OtherColumn] = OtherColumn1
        FROM MyOtherTable1
        WHERE ...
        UNION
        SELECT OtherColumn2
        FROM MyOtherTable2
        WHERE ...
    ) AS T
        ON T.ID = U.ID
        SET MyColumn = T.OtherColumn

So che questo funziona per SQL Server, quindi vale la pena di provarlo in MySQL.

update xtable
set a = 
   Case
     when a = "a"
     then z
     when a = "b"
     then y
   End
where ...

È possibile costruire la dichiarazione caso, sulla base di diverse righe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top