[英]Update in a join with sub-query
UPDATE item t
INNER JOIN ( SELECT
item_name,
MAX( item_keyword ) AS item_keyword
FROM item
WHERE ca_id2 = '2010'
GROUP BY item_name
) s ON t.item_name = s.item_name
SET t.item_keyword = s.item_keyword
WHERE t.ca_id2 ='3010'
The error is: 错误是:
1064 - You have an error in your SQL syntax.
1064-您的SQL语法错误。 Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT item_name, max(item_keyword) AS item_keyword FROM item
检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在'SELECT item_name,max(item_keyword)AS item_keyword FROM item附近使用
MySQL version 4.0.22 What is the reason for the failure? MySQL版本4.0.22失败的原因是什么?
I tried to construct your query based on http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/ 我试图根据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'
Or you can try this version too 或者您也可以尝试此版本
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'
Sorry, I don't have MySQL 4 around, so you have to test the above queries. 抱歉,我没有MySQL 4,因此您必须测试上述查询。
Other readings: 其他读物:
If the above queries don't work, you can try using a temporary table instead of the subselect: 如果以上查询不起作用,则可以尝试使用临时表而不是子选择:
http://sqlfiddle.com/#!2/13ccb/1 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.