MySQL更新重复prod_skuid报错求助:嵌套查询更新脚本问题
解决更新重复prod_skuid时的MySQL报错问题
嘿,我看了你遇到的问题——单独运行那个生成新prod_skuid的子查询完全没问题,但套上UPDATE就报错对吧?这主要是因为你的UPDATE语句语法有误,而且MySQL在更新同一张表时,直接引用自身的子查询会有语法限制。
先给你一个能正常运行的修正版UPDATE脚本:
UPDATE tbl_product t1 JOIN ( SELECT p_id, prod_skuid FROM ( SELECT p_id, IF(@row = prod_skuid, @count, @count := 1), CONCAT(prod_skuid, '', @count) as prod_skuid, @row := prod_skuid, @count := @count + 1 FROM tbl_product JOIN (SELECT @count := 0, @row := "") as t WHERE prod_skuid IN( SELECT prod_skuid FROM tbl_product GROUP BY prod_skuid HAVING count(prod_skuid) > 1 ) ) as final ) as t ON t1.p_id = t.p_id SET t1.prod_skuid = t.prod_skuid;
错误原因说明:
- 你原来的UPDATE语句里,
SET t1.prod_skuid = t.prod_skuid ( SELECT ... )这部分写法完全错误,正确的做法是先通过JOIN把原表和生成新值的临时表关联起来,再进行赋值操作。 - MySQL不允许在UPDATE/DELETE操作中,直接在SET或WHERE子句里引用正在被修改的表的子查询,用JOIN关联临时表的方式就能避开这个限制。
另外,你那个能正常运行的查询语句是没问题的,只是套进UPDATE时的写法错了:
SELECT p_id, prod_skuid FROM ( SELECT p_id, IF(@row = prod_skuid, @count, @count := 1), CONCAT(prod_skuid, '', @count) as prod_skuid, @row := prod_skuid, @count := @count + 1 FROM tbl_product JOIN (SELECT @count := 0, @row := "") as t WHERE prod_skuid IN( SELECT prod_skuid FROM tbl_product GROUP BY prod_skuid HAVING count(prod_skuid) > 1 ) ) as final
内容的提问来源于stack exchange,提问作者Leonard
相关产品推荐
相关产品推荐

