Only the partitions (or subpartitions) listed are checked for matches, and a row that is not in any of these partitions or subpartitions is not updated, whether it satisfies the clause, are flagged as unsafe for statement-based replication.(This is because the order in which the rows are updated determines which rows are ignored.) Such statements produce a warning in the error log when using statement-based mode and are written to the binary log using the row-based format when using mode.If you add new entries or move stops from one route to another you will most likely want to increment the position of the busstop within this route.That's how you can do ittable busstopsid | route | busstop | pos1 | 1 | A | 1 2 | 1 | B | 2 3 | 1 | C | 3 4 | 2 | C | 1 5 | 2 | D | 2 6 | 2 | A | 3 7 | 2 | E | 4 8 | 2 | F | 5 9 | 2 | G | 610 | 2 | H | 7Moving D, E, F, G To route 1 SET @pos=(SELECT max(t1.pos) FROM busstops t1 WHERE t1.route = 1 ); UPDATE busstops SET pos = ( SELECT @pos := @pos 1 ), route =1 WHERE id IN (5,7,8,9)I doubt this could be done otherwise since referencing the table you wish to update within the subquery creates circular references After DELETE or UPDATE i.e.
If you access a column from the table to be updated in an expression, assignments are generally evaluated from left to right.For multiple-table updates, there is no guarantee that assignments are carried out in any particular order. COLUMN2 IS NULLAn outerjoin is performed based on the equijoin condition.If you set a column to the value it currently has, My SQL notices this and does not update it. Records not matching the equijoin from table2 are marked with null.order by recno desc limit 1You can also accomplish the same by the following query :update t1 , (select id ,max(recno) as recno from t1 where id=8 group by recno) ttset t1.c1 = ' NO'where tt.id=t1and t1.recno=tt.recno Comments are welcome.The @value := col will always evaluate to true and will store the col value before the update in the @value variable.UPDATE tbl_name SET fld2 = CASE fld1WHEN val1 THEN data1WHEN val2 THEN data2ELSE fld2 ENDThe note is: do not forget ELSE.If you do not use it, all rows that are outside the range of your updated values will be set to blank!when a row of a subset is lost/deleted/moved away from it, the whole subset will need to be reordered.This can be done similarily : SET @pos=0; UPDATE busstops SET pos = ( SELECT @pos := @pos 1 ) WHERE route = 1 ORDER BY pos ASCChris H (chansel0049) I experienced a weird issue converting from 4 to 5.I was not able, using my SQL 4.1.1, to do this as a subquery: UPDATE Groups LEFT JOIN (SELECT Group Id, MIN(Val Within Group) AS base Val FROM Groups GROUP BY Group Id) AS Grp Sum USING (Group Id) SET Val Within Group=Val Within Group-base Val; Csaba Gabor UPDATE Syntax with "on-line" updating value limitations.I had a problem - a had to update a column "rate" but if the existince or new value is greater then 5 this "5" will be finally value in field.