UPDATE `files` SET `file_md5` =
(
SELECT MD5( `file_blob` )
FROM `files`
WHERE `id`= 6
)
WHERE `id` = 6
エラーが発生しました:
#1093-FROM句で更新するターゲットテーブル 'files'を指定できない
判明したように、ケースはバグ番号6980です。 MySQLでは、SELECTクエリで使用するのと同じテーブルを変更(DELETEを含む)することはできません。 この動作はdev.mysql.com/doc/mysql/en/UPDATE.htmlで文書化されています 。 このバグはMySQL 4.1.7で発見されましたが、今日まで修正されていません。
1つの方法は、 複数のクエリを使用することです 。
または、サブクエリで一時テーブルを使用できます :
UPDATE `apples`
SET `price` = (
SELECT `price` FROM (
SELECT * FROM `apples`
) AS x
WHERE `variety` = 'gala')
WHERE `variety` = 'fuji';
しかし、この方法は非常にく、パフォーマンスに悪影響を及ぼします。 そして、残念ながら、一時テーブルに複数回アクセスすると動作しません...