2012-08-01 63 views
0

我一直在這一整天都陷入困境,終於找到了一個腳本,它將刪除除原始數據之外的所有數據,無論如何,我做了必要的更改以使其可以正常工作與我的代碼,不幸的是它吐出一個語法錯誤。我現在一直在看它約2個小時,我只是不能看到它。 總之,使用MySQL數據庫和繼承人使用的IM即時通訊..在不刪除原始數據庫的情況下刪除重複數據庫問題

DELETE * 
FROM music u 
JOIN (

SELECT melody, chorus1, chorus2, MIN(id) AS minid 
FROM music 
GROUP BY melody, chorus1, chorus2 
HAVING (
COUNT(*) >1 
) 
) AS dupusers ON u.melody = dupusers.melody 
AND u.chorus1 = dupusers.chorus1 
AND u.chorus2 = dupusers.chorus2 
ORDER BY u.melody, u.chorus1, u.chorus2 
WHERE u.id <> minid 

,我得到以下錯誤:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM music u JOIN (SELECT melody, chorus1, chorus2, MIN(id) AS minid ' at line 1

是..

* 
FROM music u 
JOIN (

SELECT melody, chorus1, chorus2, MIN(id) AS minid 
+0

'DELETE * FROM table' is not valid SQL。 '刪除表'將是。 – Romain 2012-08-01 10:40:58

回答

1

其原因您在DELETE *處有語法錯誤,並且您在ORDER BY子句之後使用了WHERE子句。無需使用ORDER BY子句中DELETE查詢無極限的嘗試:

DELETE u 
FROM music u 
    INNER JOIN (
     SELECT melody, chorus1, chorus2, MIN(id) AS minid 
     FROM music 
     GROUP BY melody, chorus1, chorus2 
     HAVING COUNT(*) >1 
    ) dupusers 
    ON u.melody = dupusers.melody 
     AND u.chorus1 = dupusers.chorus1 
     AND u.chorus2 = dupusers.chorus2 
WHERE u.id <> minid; 

另一種簡單的方法來刪除重複是添加唯一索引表上看到here

ALTER IGNORE TABLE music ADD UNIQUE KEY ix1(melody, chorus1, chorus2); 
+0

好吧,那是我不想知道的一些事情,謝謝! – Raider00321 2012-08-01 11:02:50