重复记录的出现,通常是用于程序后端验证不严谨导致出现的垃圾数据,想要查询并删除,可通过以下实现方式
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
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
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
)