У меня есть таблица, содержащая около 10 000 строк. Я хочу обновить первые 500 строк с помощью SQL.
UPDATE gs_user_objects_copy SET user_id = '269' WHERE user_id = '14' LIMIT 500
Я хочу изменить user_id на 269, где он был 14, но в базе данных найдены только первые 500. Похоже, функция LIMIT выдает ошибку.
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с '(500) gs_user_objects_copy WHERE user_id = '14'' в строке 1.
Из таблицы базы данных первые 500 записей должны измениться на новое значение.
🤔 А знаете ли вы, что...
MySQL может работать с несколькими одновременными соединениями к базе данных.
Проблема, с которой вы столкнулись, заключается в том, что LIMIT
нельзя использовать, вместо этого используйте subquery
UPDATE gs_user_objects_copy
JOIN (
SELECT id FROM gs_user_objects_copy
WHERE user_id = '14'
ORDER BY id
LIMIT 500
) AS subquery ON gs_user_objects_copy.id = subquery.id
SET gs_user_objects_copy.user_id = '269';
Альтернативно
Если вы хотите использовать CTE
, который в данном случае работает отлично, вот фрагмент того, как это делается.
WITH cte AS (
SELECT id
FROM gs_user_objects_copy
WHERE user_id = '14'
ORDER BY id
LIMIT 500
)
UPDATE gs_user_objects_copy
JOIN cte ON gs_user_objects_copy.id = cte.id
SET gs_user_objects_copy.user_id = '269';
LIMIT не может напрямую поддерживаться в стандартном SQL, включая mysql. Вы можете использовать подзапрос для обновления первых 500 строк.
UPDATE gs_user_objects_copy
SET user_id = '269'
WHERE id IN (
SELECT id
FROM (
SELECT id
FROM gs_user_objects_copy
WHERE user_id = '14'
ORDER BY id
LIMIT 500
) AS subquery
);