2012-07-01 46 views
1
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' 

的错误是:更新的加入与子查询

1064 - 你在你的SQL语法错误。检查 对应于你的MySQL服务器版本正确的语法使用 附近手册“SELECT ITEM_NAME,MAX(item_keyword)AS item_keyword 从项目

MySQL的版本4.0.22什么是失败的原因?

+1

Yowza ....'4.0.22'。我都支持较老的版本,但这是_ancient_。但是:[_“目前,您无法更新表并从子查询中的同一表中进行选择。”_](http://dev.mysql.com/doc/refman/4.1/en/update.html)。 – Wrikken

+0

还有别的办法吗? – user1494207

+0

请参阅http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/ – biziclop

回答

1

我试图根据 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; 
+0

谢谢,但没有解决问题.T.T – user1494207

+0

它仍然会抛出语法错误吗?我的第一个查询在MySQL 5.5中起作用:http://sqlfiddle.com/#!2/81f50/2 – biziclop

+0

语法错误... mysql 4.0.22 ...不能更改mysql版本。原因是因为托管服务。我想在4.0.22 – user1494207