У меня есть таблица, содержащая около 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 записей должны измениться на новое значение.
Предоставленный текст запроса не содержит подстроки '(500)'
, указанной в сообщении об ошибке. Либо запрос, отправленный в MySQL, не соответствует предоставленному, либо вы используете библиотеку доступа, специфичную для MS SQL, которая преобразует LIMIT 500 в SELECT TOP (500).
Проблема, с которой вы столкнулись, заключается в том, что 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
);
Привет, проблема, с которой вы столкнулись, заключается в том, что предложение
LIMIT
нельзя использовать непосредственно в инструкции UPDATE в MySQL.