2011-12-06 193 views
2

我试图从一个表中删除记录,如果有超过15个来自同一家公司(如果有超过15个公司的记录,所有的公司记录被删除)。MySQL删除INNER JOIN中的COUNT不删除所有记录

我使用的查询如下:

DELETE l.* FROM literature_request l 
INNER JOIN 
    (SELECT literature_request_id 
    FROM literature_request 
    GROUP BY company 
    HAVING COUNT(*) > 15) lr 
ON l.literature_request_id = lr.literature_request_id; 

这应该大约25,000行的地方删除,但每次只奇怪删除约500我运行它:

mysql> DELETE l.* FROM literature_request l INNER JOIN (SELECT literature_request_id FROM literature_request GROUP BY company HAVING COUNT(*) > 15) lr ON l.literature_request_id = lr.literature_request_id; 
Query OK, 564 rows affected (0.39 sec) 

mysql> DELETE l.* FROM literature_request l INNER JOIN (SELECT literature_request_id FROM literature_request GROUP BY company HAVING COUNT(*) > 15) lr ON l.literature_request_id = lr.literature_request_id; 
Query OK, 547 rows affected (2.24 sec) 

mysql> DELETE l.* FROM literature_request l INNER JOIN (SELECT literature_request_id FROM literature_request GROUP BY company HAVING COUNT(*) > 15 LIMIT 0,30000) lr ON l.literature_request_id = lr.literature_request_id; 
Query OK, 533 rows affected (1.27 sec) 

mysql> DELETE l.* FROM literature_request l INNER JOIN (SELECT literature_request_id FROM literature_request GROUP BY company HAVING COUNT(*) > 15 LIMIT 0,30000) lr ON l.literature_request_id = lr.literature_request_id; 
Query OK, 523 rows affected (0.43 sec) 

我m不会在运行之间添加新行,所以我想知道为什么每次运行它时会删除〜500。它不应该第一次删除所有这些,并且不会影响后续运行的任何行吗?

这里有我的错误,还是有更好的方法来完成我想要做的?

+0

是否要删除那些行数多于15行的公司? –

+0

是的。如果一家公司有超过15行,那么该公司的所有行应该被删除。 – tkooser

回答

2

如果我理解正确的话,你想加入的company

DELETE l FROM literature_request l 
INNER JOIN 
    (SELECT company 
    FROM literature_request 
    GROUP BY company 
    HAVING COUNT(*) > 15) lr 
ON l.company = lr.company 

背后的怪异行为的原因是,在子查询,你被company分组但你选择literature_request_id。但是,SQL引擎应该选择哪一个 - 15个或更多?它选择一个(或多或少随机),因此只有该行(每个公司的一行)被删除。

+0

现在完美无缺。非常感谢。 – tkooser