You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WITH和Partition在MySQL中删除重复行时遇语法错误求助

解决MariaDB删除重复行的语法错误问题

你的代码报错是因为MariaDB(尤其是旧版本)不支持直接对CTE(公共表表达式)执行DELETE操作——CTE只是临时结果集,不能直接作为删除目标。以下是两种可行的修正方案:

方案一:使用关联子查询删除

这种方法兼容大多数MariaDB版本,需要借助表的唯一标识列(比如主键)来精准定位要删除的重复行:

DELETE s1
FROM student_quiz s1
JOIN (
    SELECT *,
           ROW_NUMBER() OVER(PARTITION BY studentID ORDER BY studentID) AS RowNumber
    FROM student_quiz
) s2 ON s1.studentID = s2.studentID 
   AND s1.your_primary_key = s2.your_primary_key -- 替换成你表的主键/唯一标识列
WHERE s2.RowNumber > 1;

方案二:CTE关联原表删除(MariaDB 10.3+)

如果你的MariaDB版本是10.3及以上,可以保留CTE写法,但需要关联原表而非直接删除CTE:

WITH studentTable AS (
    SELECT *,
           ROW_NUMBER() OVER(PARTITION BY studentID ORDER BY studentID) AS RowNumber
    FROM student_quiz
)
DELETE s
FROM student_quiz s
JOIN studentTable st ON s.your_primary_key = st.your_primary_key -- 替换成唯一标识列
WHERE st.RowNumber > 1;

注意事项

  • 必须替换代码中的your_primary_key为表中实际的主键或唯一列(比如id、quiz_record_id),否则可能误删所有重复组的行。
  • 执行删除前,建议先把DELETE换成SELECT s1.*(方案一)或SELECT s.*(方案二),确认将要删除的行符合预期后再执行删除。
  • 如果表没有唯一标识列,建议先添加自增主键,避免删除时出现匹配错误。

内容的提问来源于stack exchange,提问作者tester tested

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:12:09