サブクエリで作成した疑似的なテーブルにJOINすることで解決できました。 本当に? サブクエリを利用する以上、重くならないかという懸念が生じます。 まずはサブクエリ .. SELECT * FROM t1が展開される。100万行に対するフルフェッチ。 その100万行に対してPRIMARYのクエリ、SELECT .. FROM .. WHERE ..が実行される。 サブクエリの結果にはINDEXが無いので、これもまるまるフェッチ。 合計200万行フェッチしている算段。 [日々の覚書]MySQLのFROM句サブクエリの順番 つまり、 ①サブクエリで一時テーブルをメモリ上に作成 ②一時テーブルに対してJOINし、UPDATEを実行。 という手順を辿っており、かつ一時テーブルにはINDEXが存在しないため、一時テーブルの内容が膨大であった場合には多大な時間がかかってしまうわけです。 サブクエリで獲