MySQL之You can‘t specify target table for update in FROM clause解决办法

需求:修改omssku表部分特定行 defaultSku的值

SELECT a.id from omssku a LEFT JOIN omsitem b

on a.itemId =b.id

where b.itemName like "perfectitem%"

错误样例:

UPDATE omssku set omssku.defaultSku=1

where omssku.id in

(SELECT a.id from omssku a LEFT JOIN omsitem b

on a.itemId =b.id

where b.itemName like "perfectitem%")

mysql不允许,修改当前表时,又直接以当前表作为查询条件

解决方法一:加中间表

UPDATE omssku

SET omssku.defaultSku = 0

WHERE

omssku.id IN (

SELECT

c.id

FROM

(SELECT a.id FROM omssku a LEFT JOIN omsitem b ON a.itemId = b.id WHERE b.itemName LIKE "perfectitem%" ) c

)

解决方法二:查询结果与原表连接作为新表

UPDATE omssku o,

(SELECT a.id as id

FROM

omssku a

LEFT JOIN omsitem b ON a.itemId = b.id

WHERE

b.itemName LIKE "perfectitem%") u

SET o.defaultSku = 1

WHERE

o.id = u.id

解决方法三:思想与方法二一致

UPDATE omssku a

INNER JOIN omsitem b ON a.itemId = b.id

SET a.defaultSku = 1

WHERE

b.itemName LIKE "perfectitem%";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值