Updating rows using select into online dating survey results
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.UPDATE tbl_name SET fld2 = CASE fld1WHEN val1 THEN data1WHEN val2 THEN data2ELSE fld2 ENDThe note is: do not forget ELSE.
Here is a way to use multiple tables in your UPDATE statement, but actually copying one row values into the other, meaning, we're using the same table: UPDATE jobs AS to Table, jobs AS from Table SET to Table.job_type_id = from Table.job_type_id, to Table.job_company_id = from Table.job_company_id, to Table.job_source = from Table.job_source, WHERE (to Table.job_id = 6) AND (from Table.job_id = 1)--------------Pretty cool.
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.
Ideal when writing a script is just too much effort.
Sometimes you have a lot of processes that could be updating a column value in a table. ID=54321 Here's a workaround for the update/subquery/cant do self table "bug"Senario is, ID 8 has multiple records, only the last (highest) record needs to be changedupdate t1 set c1 = ' NO'where id='8'order by recno desc limit 1I would prefer update t1 set c1=' NO' WHERE ID=8 AND RECNO = (SELECT MAX(RECNO) FROM T1 WHERE ID=8)But that's not currently allowed If you want to update a table based on an aggregate function applied to another table, you can use a correlated subquery, for example: UPDATE table1 SET table1field = (SELECT MAX(table2.table2field) FROM table2 WHERE table1.table1field = table2.table2field)This can be helpful if you need to create a temporary table storing an ID (for, say, a person) and a "last date" and already have another table storing all dates (for example, all dates of that person's orders).