mysql 连表删除并limit条数

       

        心急的朋友可以直接跳到最后看解决方法:

         

        先初始化表数据:

CREATE TABLE `t_user` (
  `id` bigint(20) NOT NULL,
  `user_name` varchar(100) DEFAULT NULL COMMENT '姓名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';



CREATE TABLE `t_user_extend` (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
  `age` int(3) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户拓展信息表';


INSERT INTO `t_user`(`id`, `user_name`) VALUES (1, '张三');
INSERT INTO `t_user`(`id`, `user_name`) VALUES (2, '李四');
INSERT INTO `t_user`(`id`, `user_name`) VALUES (3, '王五');


INSERT INTO `t_user_extend`(`id`, `user_id`, `age`) VALUES (1, 1, 20);
INSERT INTO `t_user_extend`(`id`, `user_id`, `age`) VALUES (2, 2, 21);

        在 mysql标准的sql语法中: https://dev.mysql.com/doc/refman/8.0/en/delete.html 连表删除时,不允许使用

[LIMIT row_count]

        并且如果想通过子查询的方式如:

DELETE 
	u, e
FROM t_user u
LEFT JOIN t_user_extend e ON u.id = e.user_id
WHERE u.id IN (
	SELECT id FROM t_user LIMIT 0, 2 
)

        这样也会报:This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' (目前我使用的mysql版本是:8.0.37,可能以后版本的mysql会支持这种子查询的删除方法

    

解决方案:  

        所以,要连表删除并limit条数时,不妨试试用 join 的方式:

DELETE 
	u, e
FROM t_user u
LEFT JOIN t_user_extend e ON u.id = e.user_id
INNER JOIN (
	SELECT id FROM t_user LIMIT 0, 2 
) sub ON u.id = sub.id;

        执行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值