このテーブルに重複する行があるかどうかをチェックする、テーブル名をパラメーターとしてストアド プロシージャを作成しました。もちろん、ステートメントは動的に構築されます。
INSERT INTO tmpTable
SELECT col1, col2,... FROM table GROUP BY col1, col2, ... HAVING COUNT(*) > 1;
DELETE FROM tablename FROM tablenname
INNER JOIN tmpTable ON ISNULL(tablename.col1, 0) = ISNULL(tmpTable.col1, 0)
AND ISNULL(tablename.col2, 0) = ISNULL(tmpTable.col2, 0)
AND ...;
INSERT INTO tablename SELECT * FROM tmpTable;
これまでのところ動作するはずですが、問題は、テーブルにテキストなどの blob 列がある場合に失敗することです。それらは では比較できませんJOIN
。私も試しました
DELETE FROM tablename GROUP BY col1, col2, ... HAVING COUNT(*) > 1;
ただし、自己結合なしで直接ステートメントGROUP BY
でサポートされていません。DELETE
information_schemaまた、これらのテーブルには主キーがないため、このテーブルの主キーを照会することはできません。
何か案は?ありがとう。