It is not possible to update (UPDATE) the same table that you use in the SELECT query
Today I came across a very unpleasant bug in MySQL. When executing the following query in MySQL 5.0.45:
UPDATE `files` SET `file_md5` = ( SELECT MD5( `file_blob` ) FROM `files` WHERE `id`= 6 ) WHERE `id` = 6
Got an error: # 1093 - you can not specify target table for files in FROM clause As it turned out the case in bug number 6980 . In MySQL, you cannot change (including DELETE) the same table that you use in a SELECT query. This behavior is documented at dev.mysql.com/doc/mysql/en/UPDATE.html . The bug was discovered in MySQL 4.1.7, but it has not been fixed to this day.
One way out is to use multiple queries . ')
Or you can use a temporary table in a subquery :
UPDATE `apples` SET `price` = ( SELECT `price` FROM ( SELECT * FROM `apples` ) AS x WHERE `variety` = 'gala') WHERE `variety` = 'fuji';
But this method is very ugly and badly affects performance. And, unfortunately, it will not work if you refer to the temporary table more than once ...