MYSQL - 在UPDATE语句的WHERE子句中使用相同表的子查询

19 浏览
0 Comments

MYSQL - 在UPDATE语句的WHERE子句中使用相同表的子查询

使用以下代码,我遇到了一个错误“# 1093-您不能在FROM子句中指定目标表't1'进行更新”:

UPDATE `table1` t1 SET t1.name = 'abc'
WHERE t1.id = 165 AND NOT EXISTS (
    SELECT t2.id FROM `table1` t2 WHERE t2.id != 165 AND t2.name = 'abc'    
)

但以下代码没有问题:

UPDATE `table1` t1 SET t1.name = 'abc'
WHERE t1.id = 165 AND NOT EXISTS (
    SELECT t2.id FROM `table2` t2 WHERE t2.id != 165 AND t2.name = 'abc'    
)

我错在哪里了?

0
0 Comments

原因:这个问题的出现是因为在UPDATE语句的WHERE子句中使用了同一张表的子查询,但是这种写法并不能达到预期的效果。

解决方法:

可以通过以下方式来解决这个问题:

UPDATE `table1` t1 
SET t1.name = 'abc'
WHERE t1.id = 165 
AND NOT EXISTS (
    SELECT 1 FROM `table1` t2 
    WHERE t2.id = t1.id 
    AND t2.name = 'abc'
)

这样就可以在更新语句的WHERE子句中使用同一张表的子查询,并且能够达到预期的效果。

0