2012-02-14 80 views
1
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') 

这是我希望MySQL执行的(稍微简化的)查询。我读过其他页面的stackoverflow,这是不支持,它可以通过使用JOINS解决。这怎么可能被'转录'成使用连接的查询?我发现很难这样做,因为我从来没有尝试用多个表创建DELETE查询。MySQL |您无法在FROM子句中指定目标表'a'进行更新

+1

[DELETING doubled users(MySQL)]的可能重复(http://stackoverflow.com/questions/2669165/deleting-doubled-users-mysql) – 2012-02-14 22:27:22

回答

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' 

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

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

4

这是一种常见的MySQL的问题,使用选择和更新之间的临时表/删除:

DELETE FROM table_a WHERE id IN 
    (select id from 
     (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') 
    ) tempTable 
2

有用于从复式表删除两(略有不同)的语法。这里有一个没有USING

DELETE a 
FROM 
     table_a AS a 
    INNER JOIN 
     table_b AS b 
    ON b.code = a.code 
    AND b.id = a.b_id 
WHERE 
     a.object_id = 1 
    AND a.code = 'code' 
    AND b.`table` = 'testTable' --- Do you actually have a column named "table"? 
0

我的方式......如果你可以使用它!

DELETE FROM table_a WHERE id IN(SELECT id FROM(SELECT id FROM table_a WHERE userid=99 GROUP BY mobile HAVING COUNT(mobile) > 1) as t2) 
相关问题