簡體   English   中英

如何為mysql delete語句設置正確的限制

[英]How to set correct limit for mysql delete statement

我有一個腳本,用於檢查數據庫中的重復對,並選擇除一個以外的所有需要​​刪除的條目。

我有此腳本可以選擇需要刪除的前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

實際上,腳本可以在沒有設置限制的情況下在少量數據上正常運行,但是由於我是在一個大表(大約60萬個條目)上運行它,因此我需要將此腳本拆分為僅處理有限數量的例程由於服務器限制(例如處理器,內存等)而導致的數據丟失

還考慮了以下示例: MySQL LIMIT on DELETE語句,但是結果是不同的,因為無論限制有多小,都不會執行修改。

重試幾次后,我找到了一種使其工作的方法:

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' 

實際上,我所做的是為第一組數據設置了內部限制,並將其與數據庫的其余部分進行比較,以使其正常工作。 它可以工作,但是我不確定這是否是正確的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM