Использование 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 записей должны измениться на новое значение.

Привет, проблема, с которой вы столкнулись, заключается в том, что предложение LIMIT нельзя использовать непосредственно в инструкции UPDATE в MySQL.

Derek Roberts 21.08.2024 13:31

Предоставленный текст запроса не содержит подстроки '(500)', указанной в сообщении об ошибке. Либо запрос, отправленный в MySQL, не соответствует предоставленному, либо вы используете библиотеку доступа, специфичную для MS SQL, которая преобразует LIMIT 500 в SELECT TOP (500).

Akina 21.08.2024 13:36
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
2
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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';

Спасибо, ваше первое утверждение сделало то, что требуется. Очень признателен

Jaco Shutte 21.08.2024 13:44

Рад, что смог помочь :)

Derek Roberts 21.08.2024 13:48

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
);

Другие вопросы по теме