[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
)
)