2016-08-05 72 views
0

我解釋了這個問題,以及我試圖實現的解決方案。我有一個包含大量數據的表,並且我想要刪除每行5行4行。目的是要有一個更輕的桌子。Mysql,每行刪除幾行N行

這是我的要求:

SET @var_name = -1; 
DELETE FROM myTable 
    WHERE id IN 
    (
    SELECT id FROM myTable HAVING (@var_name := @var_name +1) % 5 !=0 
    ) 

選擇操作正常工作,但連同DELETE操作我得到這個消息

#1093 - Table 'myTable' is specified twice, both as a target for 'DELETE' and as a separate source for data 

我明白其中的含義:我無法刪除表在請求中。解決方法是可能的:在控制檯中獲取完整列表,然後執行DELETE操作。最好在一條線上執行。

感謝您的幫助。 非常感謝

+0

請解釋爲什麼你使用'IN' 「刪除4行,每行5列」 – e4c5

+0

,你可以直接寫'ID HAVING ...' –

+0

我沒有使用具有ID成功。最後Glufu的解決方案是好的。謝謝 – LyonL

回答

1

你試試這個嗎?

SET @var_name = -1; 
DELETE FROM myTable WHERE (@var_name := @var_name +1) % 5 = 0 
+0

非常感謝,我搜索得太複雜了! – LyonL