Voulez-vous dire que vous souhaitez mettre à jour la table où champ1, champ2 et field3 sont dans l'ensemble retourné par l'instruction select?
par 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
Notez que la mise à jour peut mettre à jour plusieurs milliers de lignes.
Une table temporaire peut être utilisé aussi:
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
Ceci a l'avantage que temptab peut être utilisé plus tard, et que les index peuvent être ajoutés pour accélérer la mise à jour:
create index on temptab (field1, field2, field3);
Oui, c'est ce que je voulais. Est-il possible de retourner aussi le résultat de la sélection, donc je ne vais pas avoir à interroger deux fois? une fois pour la sélection et une fois pour la mise à jour du drapeau. – Nir
Vous pouvez effectuer votre sélection dans une table temporaire et l'utiliser. créer table temporaire temptab comme sélectionner field1, field2, ... mettre à jour la table, temptab définir table.field = 99 où table.field1 = temptab.field1 et ... – Martin