首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL Delete with COUNT in INNER不删除所有记录

MySQL Delete with COUNT in INNER不删除所有记录
EN

Stack Overflow用户
提问于 2011-12-07 03:31:23
回答 1查看 1.2K关注 0票数 2

如果来自同一公司的记录超过15条,我会尝试从表中删除记录(例如,如果来自一家公司的记录超过15条,则所有这些公司的记录都将被删除)。

我使用的查询如下:

代码语言:javascript
复制
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行:

代码语言:javascript
复制
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行。它不是应该在第一次删除所有行,然后在随后的运行中不影响任何行吗?

这是我的错误吗,或者有没有更好的方法来完成我想要做的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-07 03:39:22

如果我没理解错的话,你想加入company

代码语言:javascript
复制
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个或更多中的哪一个呢?它选择了一个(或多或少是随机的),所以只删除了那一行(每家公司的1行)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8405657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档