[Err] 1093 - You can't specify target table 't_channel_contents' for update in FROM clause

 

[Err] 1093 - You can't specify target table 't_channel_contents' for update in FROM clause

意思是不能为update的子句指定目标表 t_channel_content,原因是在MySQL中不允许在查询一张表的同时去更新这张表,为了规避这个问题,可以先生成一个中间表a,然后获取栏目内容表ID,完美解决, 不过这个可能使用不到创建的索引了,但毕竟问题解决了。

写这条SQL要达到的效果是:根据栏目ID和内容类型查找到此栏目下的所有栏目内容表的ID,根据查找出的栏目内容ID去更新栏目内容表的内容状态为下架(addedstatus 为上下架状态,1为上架,2为下架),业务层面为下架栏目的时候自动下架此栏目下的所有内容。

 原SQL:

update t_channel_contents set addedstatus = 2 
WHERE id in (
select id from t_channel_contents  where channel_id = #{channelId} and content_type = #{contentType} and addedstatus = 1
)

 

修改后的SQL:

update t_channel_contents 
set addedstatus = 2 
where id in 
(
  select a.id from (
    (select * from t_channel_contents  
     where channel_id = #{channelId} and content_type = {contentType} and addedstatus = 1) a
  )
)

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值