Использование UPDATE для обновления только 500 строк

У меня есть таблица, содержащая около 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 может работать с несколькими одновременными соединениями к базе данных.


1
52
2

Ответы:

Решено

Проблема, с которой вы столкнулись, заключается в том, что 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
);