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.
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.