MySQL複数の重複レコードを検索して削除
6216 ワード
重複記録の出現は、通常、プログラムバックエンドの検証が厳格でないために発生したゴミデータに用いられ、クエリーして削除するには、以下のように実現することができる.
もっと素晴らしいその他のテクニカルブログは、asing 1 elife’s blog に移動してください.
クエリーの繰り返しレコード
クエリー指定フィールドが同じで合計数が1より大きいデータは、複数の であることができる反復可能なフィールドを先に示す.パケット照会結果に基づいて、 を行う.
上記のクエリ結果に基づいて重複データをすべて検出上記のクエリは、コンビネーションフィールドに重複する場合 を得る.この状況に基づいて関連する具体的なデータバー数 を検索することができる.
重複レコードの削除
クエリが重複するデータidに関連する
クエリーされたデータidの削除注意ここで上記クエリ結果を直接取得すると が投げ出す.ですので、検索結果を ができます.削除クエリーの結果は、重複する可能性のあるもののみをクエリーできます.同じ状況に2つ以上の重複データがある場合、1回の削除で完全にクリアできない場合は、複数回の削除文 を実行する必要がある場合があります.
もっと素晴らしい
クエリーの繰り返しレコード
クエリー指定フィールドが同じで合計数が1より大きいデータ
HAVING
により判断SELECT
msan.memberSurvey_id,
msan.question_id,
msan.option_id
FROM
pt_member_survey_answer msan
GROUP BY
msan.memberSurvey_id,
msan.question_id,
msan.option_id
HAVING
COUNT(*) > 1
上記のクエリ結果に基づいて重複データをすべて検出
SELECT
msa.*
FROM
pt_member_survey_answer msa
WHERE
(msa.memberSurvey_id, msa.question_id, msa.option_id) IN (
SELECT
msan.memberSurvey_id,
msan.question_id,
msan.option_id
FROM
pt_member_survey_answer msan
GROUP BY
msan.memberSurvey_id,
msan.question_id,
msan.option_id
HAVING
COUNT(*) > 1
)
ORDER BY
msa.memberSurvey_id ASC,
msa.question_id ASC,
msa.option_id ASC
重複レコードの削除
クエリが重複するデータidに関連する
SELECT
msan.id AS 'id'
FROM
pt_member_survey_answer msan
GROUP BY
msan.memberSurvey_id,
msan.question_id,
msan.option_id
HAVING COUNT(*) > 1
クエリーされたデータidの削除
You can't specify target table for update in FROM clause
異常SELECT
包装する必要があります.DELETE FROM
pt_member_survey_answer
WHERE
id IN (
SELECT
rs.id
FROM (
SELECT
msan.id AS 'id'
FROM
pt_member_survey_answer msan
GROUP BY
msan.memberSurvey_id,
msan.question_id,
msan.option_id
HAVING COUNT(*) > 1
) rs
)