Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL - So aktualisieren Sie ein Feld für alle Elemente, die sich aus einer Gruppierung nach Auswahlanweisung ergeben

Meinen Sie damit, dass Sie die Tabelle aktualisieren möchten, in der sich field1, field2 und field3 in dem Satz befinden, der von Ihrer select-Anweisung zurückgegeben wird?

z.B.

update table, 
     ( select field1, field2, field3 
       FROM table WHERE field1= 5  AND field_flag =1 
       GROUP BY field1, field2, field3 limit 1000 ) temp
set table.field_flag = 99 
where table.field1=temp.field1 and table.field2=temp.field2 and table.field3 = temp.field3

Beachten Sie, dass das Update möglicherweise weit mehr als 1000 Zeilen aktualisiert.

Eine temporäre Tabelle könnte auch verwendet werden:

create temporary table temptab as
select field1, field2, field3 
FROM table WHERE field1= 5  AND field_flag =1 
GROUP BY field1, field2, field3 limit 1000 

 update table, 
        temptab temp
 set table.field_flag = 99 
 where table.field1=temp.field1 and table.field2=temp.field2 and table.field3 = temp.field3

Das hat den Vorteil, dass später temptab verwendet werden kann, und auch, dass Indexe hinzugefügt werden können, um die Aktualisierung zu beschleunigen:

create index on temptab (field1, field2, field3);