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 来解决。这怎么可能被“转录”到使用 JOINS 的查询中?我发现这样做很难,因为我从未尝试使用多个表创建 DELETE 查询。

4

4 回答 4

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。如果您只是加入这两个表,您将从两个表中删除记录。告诉 MySQL 使用这些表进行处理,但只从子句USING中的表中删除。FROM

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

于 2012-02-14T22:35:54.357 回答
4

这是一个常见的 MySQL 问题,在 select 和 update/delete 之间使用临时表:

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
于 2012-02-14T22:29:11.083 回答
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"?
于 2012-02-14T22:44:59.750 回答
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)
于 2013-02-08T09:15:57.947 回答