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

文章讲述了在遇到MySQL版本不支持LIMIT与IN子查询的情况时,提供了两种优化SQL查询的方法:一是将子查询封装到另一个子查询中,二是使用JOIN操作来达到相同的效果。这两种方法都可以在不支持LIMITIN子查询的MySQL版本中执行。
摘要由CSDN通过智能技术生成

[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版本中运行此查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值