有人可以对以下查询进行健全性检查。我们正在尝试更新我们的数据库,以便将25000个随机用户移动到新的测试电子邮件版本(将他们的emp_version更改为" 0.6.3")。我们只想更改当前活动状态为1且当前emp_version为" 0.6.2"的用户。
UPDATE email_users
SET emp_version="0.6.3"
WHERE active = 1
AND emp_version="0.6.2"
ORDER BY rand() LIMIT 25000;
答案 0 :(得分:2)
单一表格更新
您可以使用ORDER BY和LIMIT。 查看http://dev.mysql.com/doc/refman/5.7/en/update.html
UPDATE email_users
SET emp_version="0.6.3"
WHERE active = 1
AND emp_version="0.6.2"
ORDER BY rand() LIMIT 25000;
多表更新(使用INNER JOIN)
如果是多表更新,则无法在UPDATE查询中使用ORDER BY,LIMIT,以便使用它们我们使用子查询来获取25000个所需元组,然后使用相同的表进行INNER JOIN。我们无法更新子查询表,因为它实际上并不存在于数据库中。
尝试以下查询
UPDATE email_users eu INNER JOIN
(SELECT * FROM email_users
WHERE emp_version="0.6.2"
AND active = 1
ORDER BY rand()
LIMIT 25000) AS neu
SET eu.emp_version="0.6.3"
WHERE eu.id = neu.id