MySQL | 您不能在FROM子句中为更新指定目标表'a'

Sim*_*mon 1 mysql mysql-error-1093

DELETE FROM table_a WHERE id IN(
    SELECT table_a.id AS id FROM table_a, table_b 
    WHERE table_a.object_id = 1 AND table_a.code = 'code' 
        AND table_a.code = table_b.code 
        AND table_b.id = table_a.b_id 
        AND table_b.table = 'testTable')
Run Code Online (Sandbox Code Playgroud)

这是我希望MySQL执行的(稍微简化)查询.我在stackoverflow的其他页面上读到这是不受支持的,并且它可以通过使用JOINS来解决.如何使用JOINS将其"转录"为查询?我发现很难这样做,因为我从未尝试过使用多个表创建DELETE查询.

Rya*_*n P 5

您不能从表中删除并引用子查询中的同一个表 - 只是MySQL的限制.像下面这样的东西应该工作:

DELETE FROM table_a 
USING table_a
INNER JOIN table_b
    ON table_a.code = table_b.code
    AND table_b.id = table_a.b_id
    AND table_b.table = 'testTable'
WHERE table_a.object_id = 1 
    AND table_a.code = 'code' 
Run Code Online (Sandbox Code Playgroud)

重要的是USING.如果您只是加入这两个表,您将从两个表中删除记录.USING告诉MySQL使用这些表进行处理,但只从FROM子句中的表中删除.

http://dev.mysql.com/doc/refman/5.0/en/delete.html