2017-07-06 27 views
0

I 「エラー「#1093 - あなたはターゲット表を指定することはできません 『FROM句に更新のためのT1』」を得た。このコードでMYSQL - で同じテーブルにサブクエリWHERE UPDATE文の句

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エラーを解決する方法 "FROM句で更新するターゲットテーブルXを指定できません"](https://stackoverflow.com/questions/37251621/how-to-resolve-mysql-エラーが起きないように指定する - ターゲットテーブル-x-of-update-in-from) – 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に置き換えられているということですidではなく、名前はabcであるレコードに一致する(t2.name IS NULLではありませんでしたか?

+0

ありがとう!わたしにはできる :) – zontop

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

内部クエリを使用せずに同じ結果を達成できます。

上記のコードを試してください。

希望すると、これが役立ちます。

+0

これは私が入手したいものとは異なる – zontop

関連する問題