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 * を使用したためです。制限なしでクエリで句を使用する必要はありません:WHEREORDER BYORDER BYDELETE

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;

重複を削除するもう 1 つの簡単な方法は、テーブルに一意のインデックスを追加することです。こちらを参照してください。

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