2017-07-06 177 views
0

我得到了一個「錯誤「#1093 - 你不能指定目標表‘在FROM子句更新T1’」與此代碼:MYSQL - 在同一個表子查詢的WHERE UPDATE語句的WHERE子句

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

的【如何解決MySQL錯誤「不能爲更新指定目標表X FROM子句」?]可能的複製(https://stackoverflow.com/questions/37251621/how-to-resolve-mysql-錯誤您-着-指定目標表-X-用於更新功能於從) – JYoThI

回答

1

您可以改寫這個查詢作爲自連接到同一個表:

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條款已被替換爲LEFT JOIN其中從左側的任何記錄的加入沒有匹配(t2.name IS NULL)就任何紀錄,其中id不是165,名稱爲abc

+0

由於不同!這個對我有用 :) – zontop

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

您可以在不使用內部查詢的情況下實現相同的功能。

試試看上面的代碼。

希望這會有所幫助。

+0

這是從我想要得到 – zontop