如果来自同一家公司的记录超过15个,我试图从表中删除记录(如果公司有超过15条记录,则删除所有公司记录)。
我正在使用的查询如下:
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)
我不是在两次运行之间添加新行,所以我想知道为什么每次运行它都会删除~500。它不应该第一次删除所有这些,然后不影响随后运行的任何行吗?
我这里有错误,还是有更好的方法来完成我想要做的事情?
答案 0 :(得分: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个或更多?它选择了一个(或多或少随机),因此只删除了那一行(每个公司的一行)。