2014-10-31 3 views
0

Может кто-нибудь попросит проверить здравый смысл по следующему запросу. Мы пытаемся обновить нашу базу данных, чтобы переместить 25000 случайных пользователей в новую тестовую электронную почту (изменив их emp_version на «0.6.3»). Мы хотим изменить пользователей, которые в настоящее время имеют активное состояние 1, а текущая emp_version - «0.6.2».Проверка работоспособности MySQL

UPDATE email_users 
SET emp_version="0.6.3" 
WHERE active = 1 
AND emp_version="0.6.2" 
ORDER BY rand() LIMIT 25000; 
+0

Пожалуйста, дайте мне знать, какой именно ошибка, которую вы столкнулись в вашем запросе, как синтаксис выглядит довольно хорошо для меня. –

+0

Не было никакой ошибки, это была просто проверка здравого смысла, чтобы заверить, что я не испортил бы производственную базу данных. – user2694306

+0

Не мой, но ваш код полностью прекрасен :) –

ответ

2

Single Table Update

Вы можете использовать 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)

В случае нескольких обновлений таблицы один не может использовать ORDER BY, LIMIT в запросе UPDATE, чтобы использовать их, мы используем подзапрос, чтобы получить 25000 желаемых кортежей, а затем сделать INNER JOIN с той же таблицей. Мы не можем обновить таблицу подзапросов, поскольку она действительно не существует в базе данных.

Try ниже запроса

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 
+0

Он должен читать WHERE emp_version = "0.6.2", но в остальном он отлично работал. Благодаря! – user2694306

+0

извините, мой плохой, исправлено сейчас :) –

+0

Я не вижу преимущества этого запроса над оригиналом. Я что-то упускаю? – Strawberry

Смежные вопросы