[Err] 1235 - This version of MySQL doesn’t yet support ‘LIMIT
& IN/ALL/ANY/SOME subquery’
Why?
update community_message
set is_deleted = 1, remark = '手动删除其他社区id数据'
where is_deleted = 0
and id in (
SELECT message_id
FROM community_user_message_mid
WHERE remark = '手动删除其他社区id数据'
ORDER BY message_id desc
LIMIT 0, 100
);
执行以上SQL:
出现此报错,是由于在某些MySQL版本中,LIMIT子句在IN子查询中确实不受支持。
调整优化1
:
这里,我将子查询放在一个新的子查询中,以确保外部查询只需要处理子查询的结果。这种方法可以提高SQL查询的性能。但是,实际的性能提升取决于您的数据库系统和数据量。
UPDATE community_message
SET is_deleted = 1, remark = '手动删除其他社区id数据'
WHERE is_deleted = 0
AND id IN (
SELECT message_id
FROM (
SELECT message_id
FROM community_user_message_mid
WHERE remark = '手动删除其他社区id数据'
ORDER BY message_id DESC
LIMIT 0, 100
) AS subquery
)
调整优化2
:
作为替代方案,可以使用JOIN来实现相同的结果。以下是优化后的查询:
UPDATE community_message
JOIN (
SELECT message_id
FROM community_user_message_mid
WHERE remark = '手动删除其他社区id数据'
ORDER BY message_id DESC
LIMIT 100
) AS subquery ON community_message.id = subquery.message_id
SET community_message.is_deleted = 1, community_message.remark = '手动删除其他社区id数据'
WHERE community_message.is_deleted = 0;
在这个查询中,我们使用 JOIN 子句将 community_message 表与子查询 subquery 结合起来,子查询从 community_user_message_mid 表中选取满足特定条件的前100条记录。然后,我们根据 JOIN 的结果更新 community_message 表。这样,您应该可以在不支持 LIMIT 和 IN 子查询的MySQL版本中运行此查询。