MYSQL 1093 报错解决方案

自更新表数据

当执行一个简单的update语句时,发生了1093报错,语句没问题,逻辑也没问题,也很确定自己的代码不会引发数据错误,但是MySQL不允许这样执行

1093 - You can't specify target table 'TABLE_QWE' for update in FROM clause

报错语句

样例1:

UPDATE TABLE_QWE
SET TCLOSE = RAND() * 10000 
WHERE
    N_ID IN( SELECT
    N_ID 
FROM
    `TABLE_QWE` QWE
    LEFT JOIN TABLE_ASD ASD ON ASD.id = QWE.id 
WHERE
    ASD.sid = 150);

1093 - You can't specify target table 'TABLE_QWE' for update in FROM clause

解决方案

SET SQL_SAFE_UPDATES = 0;

UPDATE TABLE_QWE 
SET TCLOSE = RAND() * 10000 
WHERE
    N_ID IN( SELECT N_ID FROM (SELECT
    N_ID 
FROM
    `TABLE_QWE` QWE
    LEFT JOIN TABLE_ASD ASD ON ASD.id = QWE.id 
WHERE
    ASD.sid = 150)A);

SET SQL_SAFE_UPDATES = 1;

或者

update TABLE_QWE join TABLE_ASD ON TABLE_QWE.id = TABLE_ASD.id SET TABLE_QWE.TCLOSE =  RAND() * 10000 WHERE  TABLE_ASD.sid = 150

删除操作

内部再嵌套一层即可,也有可能需要SET SQL_SAFE_UPDATES = 0;

DELETE FROM table WHERE col in (SELECT col FROM (SELECT b.col FROM table a
right join table b on a.col = b.col
where
a.col not null)T) ;

评论 0

还没有评论,来说点什么吧。

提交后需要审核才会公开。