我有一种情况,我需要批量更新表中某列的一些值(即前5000行)。
所以我写了一个查询,如下所示
update clientdetails set lastupdateddate=now where id in (Select id from clientdetails limit 1,5000);提示此错误,因为此版本的MYSQL不支持Limit 1,5000。那么有没有其他方法可以做到这一点呢?
发布于 2011-10-08 22:34:44
你就不能这样做吗:
update clientdetails set lastupdateddate=now where <your where clause>
limit <desired limit>;发布于 2011-10-08 22:50:07
MySQL在UPDATE和子查询方面有几个问题。
SELECT * FROM table1 WHERE foo IN (SELECT foo FROM table2 LIMIT 50)是不可能的。但下面是:
SELECT *
FROM table1 t
JOIN (SELECT foo FROM table2 LIMIT 50) as tmp
ON tmp.foo = t.foo;我相信这个“(查询) as table”的东西被称为“虚拟临时视图”(但我在这里可能错了……)
您面临的第二个问题是,您无法更新当前正在读取的表。
但是(正如Griwes指出的)更新是有限度的:
UPDATE clientdetails
SET lastupdateddate = NOW()
ORDER BY id
LIMIT 0, 5000;应该行得通。确保你已经得到了ORDER BY,否则你可能会更新一些行两次,而另一些永远不会更新。
https://stackoverflow.com/questions/7697458
复制相似问题