Frage
Gibt es eine Möglichkeit, mehrere Zeilen mit unterschiedlichen Werten für jede Zeile mithilfe einer einzelnen SQL -Abfrage zu aktualisieren? Ich muss ein Colum in vielen Zeilen mit unterschiedlichen Daten aktualisieren. Die Verwendung individueller Update -Abfragen für jede Zeile scheint übermäßig übermäßig zu sein. Wenn es möglich ist, möchte ich diesen Prozess in eine einzelne SQL -Anweisung konsolidieren oder zumindest die Anzahl der erforderlichen Abfragen reduzieren.
Ich verwende PHP mit dem Zend Framework und MySQL.
Lösung
Erstellen Sie eine temporäre Tabelle und füllen Sie sie mit:
CREATE TEMPORARY TABLE temptable (id INTEGER, VALUE VARCHAR(200))
INSERT
INTO temptable
VALUES
('1', 'val1'),
('2', 'val2'),
('3', 'val3'),
('4', 'val4')
Dann Ausgabe:
UPDATE
mytable m, temptable t
SET m.value = t.value
WHERE m.id = t.id
Andere Tipps
Ich weiß nicht speziell über MySQL, sondern um mehrere Zeilen basierend auf einer Auswahl oder einer Vereinigung mehrerer Auswahl zu aktualisieren, würde ich tun
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
Aktualisieren Sie 28.10.2014, konvertiert in die Arbeit für 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
Ich weiß, dass dies für SQL Server funktioniert, also ist es einen Versuch in MySQL wert.
update xtable
set a =
Case
when a = "a"
then z
when a = "b"
then y
End
where ...
Sie können die Fallanweisung basierend auf Ihren verschiedenen Zeilen konstruieren.