如何为mysql delete语句设置正确的限制

时间:2013-06-19 13:58:04

标签: mysql limit sql-delete

我有一个脚本,用于检查数据库中的重复对,并选择除了一个之外需要删除的所有条目。

我有这个脚本,它选择了需要删除的前100个条目并且工作正常:

SELECT*  
  FROM vl_posts_testing 
  INNER JOIN (
       SELECT max(ID) AS lastId, `post_content`,`post_title`
       FROM vl_posts_testing WHERE vl_posts_testing.post_type='post'
       GROUP BY `post_content`,`post_title`
       HAVING count(*) > 1) duplic 
  ON duplic.`post_content` = vl_posts_testing.`post_content` 
  AND duplic.`post_title` = vl_posts_testing.`post_title`
WHERE vl_posts_testing.id < duplic.lastId 
AND vl_posts_testing.post_type='post' 
LIMIT 0,100

但是当我尝试使用以下方法删除这组数据时

DELETE vl_posts_testing 
  FROM vl_posts_testing 
  INNER JOIN (
       SELECT max(ID) AS lastId, `post_content`,`post_title`
       FROM vl_posts_testing WHERE vl_posts_testing.post_type='post'
       GROUP BY `post_content`,`post_title`
       HAVING count(*) > 1) duplic 
     ON duplic.`post_content` = vl_posts_testing.`post_content` 
     AND duplic.`post_title` = vl_posts_testing.`post_title`
WHERE vl_posts_testing.id < duplic.lastId 
AND vl_posts_testing.post_type='post' 
LIMIT 100

我收到了以下错误:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   在第8行'LIMIT 10'附近

使用此答案https://stackoverflow.com/a/6108860/1168944

构建了脚本

实际上,脚本在没有设置限制的情况下可以很好地处理少量数据,但是由于我在一个大表(大约600k条目)上运行它我需要将该脚本拆分为仅处理的例程由于处理器,内存等服务器限制而导致的数据量有限。

还考虑了这个例子:MySQL LIMIT on DELETE statement但结果是不同的,因为无论限制有多小都不会执行任何修改。

1 个答案:

答案 0 :(得分:1)

经过几次重试后,我找到了一种方法让它发挥作用:

DELETE vl_posts_testing 
  FROM vl_posts_testing 
  INNER JOIN (
       SELECT max(ID) AS lastId, `post_content`,`post_title`
       FROM vl_posts_testing WHERE vl_posts_testing.post_type='post'
       GROUP BY `post_content`,`post_title`
       HAVING count(*) > 1
       LIMIT 0,100 ) duplic 
     ON duplic.`post_content` = vl_posts_testing.`post_content` 
     AND duplic.`post_title` = vl_posts_testing.`post_title`
WHERE vl_posts_testing.id < duplic.lastId 
AND vl_posts_testing.post_type='post' 

实际上我所做的是为第一组数据设置内部限制,并将其与数据库的其余部分进行比较,以使其工作。它工作但我不确定这是正确的方法。