DBAtlas · Veritabanı operasyon atlası

1093: You can't specify target table 'x' for update in FROM clause

MySQL

Ne demek?

Bir UPDATE ya da DELETE ifadesinde, güncellenen/silinen tablonun kendisi doğrudan bir alt sorguda (FROM içinde) kaynak olarak kullanılamaz. MySQL aynı tabloyu hem hedef hem de kaynak olarak bu şekilde kullanmaya izin vermez.

Neden olur?

UPDATE tablo ... WHERE id IN (SELECT ... FROM tablo ...) gibi, alt sorgunun doğrudan aynı hedef tabloyu okuması; DELETE'te aynı tabloya referans veren alt sorgu.

Nasıl çözülür?

Alt sorguyu bir türetilmiş tabloya (derived table) sarıp yeni bir alias verin; böylece MySQL onu ayrı bir kopya olarak ele alır: UPDATE tablo SET c = 1 WHERE id IN (SELECT id FROM (SELECT id FROM tablo WHERE kosul) AS t); Alternatif olarak self-join biçiminde yazın: UPDATE tablo a JOIN tablo b ON ... SET a.c = ...;

DBAtlas'ta aç →

Aynı motorda diğer kayıtlar