MYSQL - UPDATE语句的WHERE子句中的同一个表上的子查询

时间:2017-07-06 09:19:26

标签: mysql

我收到 “错误”#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'    
)

我出了什么问题?

2 个答案:

答案 0 :(得分:1)

您可以将此查询重新定义为同一个表的自联接:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

此处的更新逻辑是您的UPDATE table1 t1 LEFT JOIN table1 t2 ON t2.id != 165 AND t2.name = 'abc' SET t1.name = 'abc' WHERE t1.id = 165 AND t2.name IS NULL 子句已替换为NOT EXISTS,其中来自联接左侧的任何记录匹配({{1} }})LEFT JOIN不是165且名称为t2.name IS NULL的任何记录。

答案 1 :(得分:0)

UPDATE `table1` t1 SET t1.name = 'abc'
WHERE t1.id = 165 AND t1.name != 'abc'  

您可以在不使用内部查询的情况下实现相同目的。

试试上面的代码。

希望这会有所帮助。