关于MYSQL中报错[Err] 1235 - This version of MySQL doesn‘t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery‘

雨点打透心脏的1/2处 2024-03-22 16:10 148阅读 0赞

[Err] 1235 - This version of MySQL doesn’t yet support ‘LIMIT
& IN/ALL/ANY/SOME subquery’

Why?

  1. update community_message
  2. set is_deleted = 1, remark = '手动删除其他社区id数据'
  3. where is_deleted = 0
  4. and id in (
  5. SELECT message_id
  6. FROM community_user_message_mid
  7. WHERE remark = '手动删除其他社区id数据'
  8. ORDER BY message_id desc
  9. LIMIT 0, 100
  10. );

执行以上SQL:
在这里插入图片描述

出现此报错,是由于在某些MySQL版本中,LIMIT子句在IN子查询中确实不受支持。

调整优化1:
这里,我将子查询放在一个新的子查询中,以确保外部查询只需要处理子查询的结果。这种方法可以提高SQL查询的性能。但是,实际的性能提升取决于您的数据库系统和数据量。

  1. UPDATE community_message
  2. SET is_deleted = 1, remark = '手动删除其他社区id数据'
  3. WHERE is_deleted = 0
  4. AND id IN (
  5. SELECT message_id
  6. FROM (
  7. SELECT message_id
  8. FROM community_user_message_mid
  9. WHERE remark = '手动删除其他社区id数据'
  10. ORDER BY message_id DESC
  11. LIMIT 0, 100
  12. ) AS subquery
  13. )

调整优化2:
作为替代方案,可以使用JOIN来实现相同的结果。以下是优化后的查询:

  1. UPDATE community_message
  2. JOIN (
  3. SELECT message_id
  4. FROM community_user_message_mid
  5. WHERE remark = '手动删除其他社区id数据'
  6. ORDER BY message_id DESC
  7. LIMIT 100
  8. ) AS subquery ON community_message.id = subquery.message_id
  9. SET community_message.is_deleted = 1, community_message.remark = '手动删除其他社区id数据'
  10. WHERE community_message.is_deleted = 0;

在这个查询中,我们使用 JOIN 子句将 community_message 表与子查询 subquery 结合起来,子查询从 community_user_message_mid 表中选取满足特定条件的前100条记录。然后,我们根据 JOIN 的结果更新 community_message 表。这样,您应该可以在不支持 LIMIT 和 IN 子查询的MySQL版本中运行此查询。

发表评论

表情:
评论列表 (有 0 条评论,148人围观)

还没有评论,来说两句吧...

相关阅读