0

我整天都被困在这上面,终于找到了一个脚本,它可以删除除原始数据之外的所有数据,无论如何,我做了必要的更改以允许它与我的代码一起工作,不幸的是它吐出了一个语法错误。我已经看了大约 2 个小时了,我只是看不到它。无论如何,我使用的是 MySQL DB,并且是我使用的脚本。

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 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '* FROM music u JOIN ( SELECT melody, chorus1, chorus2, MIN(id) AS minid ' 附近使用正确的语法

这是..

* 
FROM music u
JOIN (

SELECT melody, chorus1, chorus2, MIN( id ) AS minid
4

1 回答 1

1

这是因为您有语法错误,DELETE * 并且您在WHERE子句之后使用了ORDER BY子句。无需在无限制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;

另一种删除重复项的简单方法是在表上添加唯一索引,请参见此处

ALTER IGNORE TABLE music ADD UNIQUE KEY ix1(melody, chorus1, chorus2);
于 2012-08-01T10:40:29.747 回答