我有一种情况需要批量更新表中列的某些值(即前5000行)。
所以我写了一个查询
update clientdetails set lastupdateddate=now where id in (Select id from clientdetails limit 1,5000);
由于此版本的MYSQL不支持Limit 1,5000,因此提示错误。 那么还有其他方法吗?
答案 0 :(得分:3)
难道你不能这样做:
update clientdetails set lastupdateddate=now where <your where clause>
limit <desired limit>;
答案 1 :(得分:2)
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;
我相信这个“(查询)作为表”的东西被称为“虚拟临时视图”(但我可能在这里错了......)
您遇到的第二个问题是您无法使用当前正在阅读的表格。
但是(正如Griwes指出的那样)UPDATE知道一个限制:
UPDATE clientdetails
SET lastupdateddate = NOW()
ORDER BY id
LIMIT 0, 5000;
应该有效。确保你在那里有ORDER BY,否则你可能会两次更新某些行,而有些行则永远不会。