一个很简单的需求,修改一个表中前1000条数据。
这个会场easy我是这样写的
UPDATE member SET is_agent = 1 WHERE id IN(SELECT id FROM member LIMIT 0,1000);
感觉这样写一点 这些都没错,先查出前1000条数据的id,然后直接修改这些id 的数据就可以了,可是mysql爆粗了,如下
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
很奇怪,怎么会出这样的问题,这是最简单的嵌套查询啊。。。
后来查询资料,发现这样的写法不对,也就是所谓的语法错误,修改了一下如下
UPDATE member SET is_agent = 1 WHERE id IN (SELECT t.id FROM (SELECT id FROM member LIMIT 0,1000) AS t);
给要查的表起个别名,这也够怪的,后来看了网上,也可以这样改写,直接将表放在from后面,就省略了别名这一步骤。当然是对查询语句有效
SELECT t.id FROM (SELECT * FROM member LIMIT 0,100) AS t;
MySQL语法还是挺奇怪的。。。