mysql子查询中不能使用LIMIT

mysql子查询中不能使用LIMIT

/*
今天遇到个问题,如下:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
*/

直接po截图和代码

我们可以通过LIMIT来删除表中的数据

第一个案例如下:

第二个案例如下:

/*
今天遇到个问题,如下:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
*/

#删除admin表中50条记录,并且是从第3条记录开始删
#报错
DELETE FROM admin WHERE 1 = 1 LIMIT 2,50;
#报错
DELETE FROM admin LIMIT 2,50;
#会报错(子查询中是不能使用LIMIT的)
DELETE FROM admin WHERE id IN (SELECT id FROM admin LIMIT 2,50);
#删除成功(#但是在有LIMIT关键字的子查询的外面再包一层就可以了),以下sql语句正确执行
DELETE FROM admin WHERE id IN (SELECT ad.id FROM (SELECT id FROM admin LIMIT 2,50) AS ad);#记得取别名

#以下查询语句都可以正确执行
SELECT id FROM admin LIMIT 2,50;
SELECT * FROM (SELECT id FROM admin LIMIT 2,50) AS ad;
SELECT ad.* FROM (SELECT id FROM admin LIMIT 2,50) AS ad;
SELECT * FROM (SELECT id FROM admin LIMIT 2,50) ad;
SELECT ad.id FROM (SELECT id FROM admin LIMIT 2,50) AS ad;
SELECT id FROM (SELECT id FROM admin LIMIT 2,50) AS ad;
#

#

#子查询中是不能使用LIMIT的,以下sql语句报错
SELECT * FROM admin WHERE id IN (SELECT id FROM admin LIMIT 2,50);
#但是在有LIMIT关键字的子查询的外面再包一层就可以了,以下sql语句正确执行
SELECT * FROM admin WHERE id IN (SELECT adm.id FROM (SELECT id FROM admin LIMIT 2,50) AS adm);#记得取别名


#
CREATE TABLE admin2 SELECT * FROM admin;
#
SELECT * FROM admin2;
#
SELECT * FROM admin2 WHERE id IN
(SELECT ad.id FROM (SELECT id FROM admin2 LIMIT 2,3) AS ad);
#
SELECT * FROM admin2 WHERE id IN
(SELECT ad.id FROM (SELECT id FROM admin2 LIMIT 4,2) AS ad);
#
SELECT * FROM admin2 WHERE id IN
(SELECT ad.id FROM (SELECT id FROM admin2 LIMIT 2,3) AS ad)
OR id IN (SELECT ad.id FROM (SELECT id FROM admin2 LIMIT 4,2) AS ad);

#删除数据
DELETE FROM admin2 WHERE id IN
(SELECT ad.id FROM (SELECT id FROM admin2 LIMIT 2,3) AS ad)
OR id IN (SELECT ad.id FROM (SELECT id FROM admin2 LIMIT 4,2) AS ad);

#
SELECT * FROM admin2 WHERE id IN
(SELECT ad.id FROM (SELECT id FROM admin2 LIMIT 3,4) AS ad)
OR id IN (SELECT ad.id FROM (SELECT id FROM admin2 LIMIT 12,2) AS ad);

#删除数据
DELETE FROM admin2 WHERE id IN
(SELECT ad.id FROM (SELECT id FROM admin2 LIMIT 3,4) AS ad)
OR id IN (SELECT ad.id FROM (SELECT id FROM admin2 LIMIT 12,2) AS ad);

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL子查询不支持使用LIMIT关键字。如果在子查询使用LIMIT,会导致错误。\[1\]\[2\]然而,可以通过在有LIMIT关键字的子查询的外面再包一层来解决这个问题。\[2\]另外,还可以将限制条件放到FROM子句而非WHERE子句,以避免嵌套查询。\[1\]在这种情况下,需要给FROM后的SELECT语句起一个别名,例如使用AS关键字。\[1\]以下是一些正确执行的示例查询语句:\[3\] - SELECT id FROM admin LIMIT 2,50; - SELECT * FROM (SELECT id FROM admin LIMIT 2,50) AS ad; - SELECT ad.* FROM (SELECT id FROM admin LIMIT 2,50) AS ad; - SELECT * FROM (SELECT id FROM admin LIMIT 2,50) ad; - SELECT ad.id FROM (SELECT id FROM admin LIMIT 2,50) AS ad; - SELECT id FROM (SELECT id FROM admin LIMIT 2,50) AS ad; 请注意,给FROM后的SELECT语句起别名是非常重要的,如果不这样做,系统仍然会报错。\[1\] #### 引用[.reference_title] - *1* [mysql子查询不支持limit问题解决](https://blog.csdn.net/wangcomputer2010/article/details/24002347)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [mysql子查询不能使用LIMIT](https://blog.csdn.net/czh500/article/details/86275400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值