sql >> Databasteknik >  >> RDS >> Mysql

MYSQL - hur man uppdaterar ett fält för alla objekt som härrör från grupp-för-val-sats

Menar du att du vill uppdatera tabellen där fält1, fält2 och fält3 finns i uppsättningen som returneras av din select-sats?

t.ex.

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

Observera att uppdateringen kan uppdatera många fler än 1000 rader.

En tillfällig tabell kan också användas:

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

Detta har fördelen att temptab kan användas senare, och även att index kan läggas till för att påskynda uppdateringen:

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


  1. En översikt över SQL Join-typer med exempel

  2. Primära nycklar och index i Hive-frågespråk är möjligt eller inte?

  3. hur man lägger till andra i oracle tidsstämpel

  4. Orsakad av:java.time.DateTimeException:Konflikt hittades:Fält DayOfWeek 6 skiljer sig från DayOfWeek 2 härledd från 2016-01-30