mysql update select

介绍

表结构为:

CREATE TABLE `rule_base)` (
  `pk_rule_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `rule_name` varchar(64) DEFAULT NULL COMMENT '名称',
  `rule_status` smallint(6) DEFAULT NULL COMMENT '状态:0有效,1无效',
  PRIMARY KEY (`pk_rule_id`)
) ENGINE=InnoDB AUTO_INCREMENT=573 DEFAULT CHARSET=utf8;

sql:

UPDATE rule_base
SET rule_status = 1
where rule_name ='xxx' ORDER BY createtime limit 1

没毛病;

然后试了下另一个sql

UPDATE rule
SET rule_status = 1
where rule_name ='xxx' ORDER BY createtime limit 1,1

这样就会报错
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 3

再试:

UPDATE t_rule_base
SET rule_status = 1
where pk_rule_id in 
(SELECT pk_rule_id from t_rule_base where rule_name like '天%' ORDER BY createtime limit 1,2)

还是报错...貌似内层不能有limit子句
[Err] 1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

再来,加了个select嵌套:

UPDATE t_rule_base
SET rule_status = 1
where pk_rule_id in (
select * from (SELECT pk_rule_id from t_rule_base where rule_name like '天%' ORDER BY createtime limit 1,2) t)

成了!!!

顺便说下这样也是不行的:

UPDATE (SELECT pk_rule_id from t_rule_base where rule_name like '天%' ORDER BY createtime limit 1,2) t
SET rule_status = 1
全部评论
楼主666
点赞 回复 分享
发布于 2019-11-22 15:03

相关推荐

shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务