【问题标题】:MySQL DELETE with JOIN getting syntax error with LIMIT statementMySQL DELETE with JOIN 使用 LIMIT 语句获取语法错误
【发布时间】:2017-08-10 15:56:40
【问题描述】:

我正在运行查询以删除重复条目。它可以在没有 LIMIT 语句的情况下工作,但会使服务器过载。我想使用 LIMIT 语句对其进行批处理。

DELETE t1
FROM data as t1
join data as t2
WHERE t1.type = t2.type
AND t1.timestamp = t2.timestamp
LIMIT 100

并使用 LIMIT 语句收到错误:

ERROR 1064 (42000):您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,以在第 6 行的“LIMIT 100”附近使用正确的语法

【问题讨论】:

    标签: mysql sql join mariadb sql-delete


    【解决方案1】:

    你不能直接使用你可以在选择中使用的删除限制

      DELETE data 
      FROM data as t1
      join (
            select distinct type, timestamp from data limit 100  
      ) t2  on t1.type = t2.type AND t1.timestamp = t2.timestamp
    

    【讨论】:

    • 这并没有完全一样的行为。在我的情况下,如果限制有效,它将是 100 个找到的重复项。此版本需要大量后端支持才能在处理已删除记录时正确处理所有记录。
    • 如果您不需要重复 .. 在子选择中使用 distinct .. ... 答案已更新 .. 所以您删除 100 个不重复的 .. 值
    【解决方案2】:

    多表DELETEUPDATE 不允许LIMIT 子句。这是错误消息的原因。解决方法...

    要进行大量的DELETEs(或UPDATEs),请以块的形式循环遍历表。 This 讨论细节。为了提高效率,它使用了PRIMARY KEY,这样遍历表格是有效率的。

    【讨论】:

      猜你喜欢
      • 2011-10-16
      • 1970-01-01
      • 2019-09-20
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 2021-08-07
      相关资源
      最近更新 更多