http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/に基づいてクエリを作成しようとしました
UPDATE item t
SET t.item_keyword =
( SELECT MAX( i.item_keyword ) AS item_keyword
FROM ( SELECT item_keyword, item_name, cd_id2 FROM item ) AS i
WHERE t.item_name = i.item_name
AND i.cd_id2 = '2010'
GROUP BY i.item_name
)
WHERE t.ca_id2 ='3010'
または、このバージョンも試すことができます
UPDATE item t
INNER JOIN ( SELECT item_keyword, item_name, cd_id2 FROM item ) AS i
SET t.item_keyword =
( SELECT MAX( i.item_keyword ) AS item_keyword
FROM i
WHERE t.item_name = i.item_name
AND i.cd_id2 = '2010'
GROUP BY i.item_name
)
WHERE t.ca_id2 ='3010'
申し訳ありませんが、私は MySQL 4 を持っていないので、上記のクエリをテストする必要があります。
他の読み方:
上記のクエリが機能しない場合は、副選択の代わりに一時テーブルを使用してみてください。
http://sqlfiddle.com/#!2/13ccb/1
CREATE TEMPORARY TABLE s
SELECT item_name,
MAX( item_keyword ) AS item_keyword
FROM item
WHERE cd_id2 = '2010'
AND item.item_name IN ( SELECT item_name FROM item WHERE item.ca_id2='3010')
GROUP BY item_name;
UPDATE item t
INNER JOIN s ON t.item_name = s.item_name
SET t.item_keyword = s.item_keyword
WHERE t.ca_id2 ='3010';
DROP TEMPORARY TABLE s;