首页 > 技术文章 > You can't specify target table for update in FROM clause

90s-ITBoy 2020-10-21 19:13 原文

报错的代码:

UPDATE a
SET model_no = 0 
WHERE
    id IN ( 
        SELECT id 
        FROM a
        WHERE gender = '1' 
        AND type = '4' 
        AND model_no > '1' 
        AND model_no <= '3' 
    ) b

先查出符合条件的数据的ID,然后再对这个id的数据进行操作,此时就会报【You can't specify target table for update in FROM clause】

原因是:不能先select出同一表中的某些值,再update这个表(在同一语句中);

解决办法:将查处的数据放到一个中间表中再从中间表中获取ID进行数据操作,示例代码:

UPDATE a
SET model_no = 0 
WHERE
    id IN ( select b.id from(
        SELECT id 
        FROM a
        WHERE gender = '1' 
        AND type = '4' 
        AND model_no > '1' 
        AND model_no <= '3' 
    ) b)

 

推荐阅读