UPDATE с ORDER BY и LIMIT не работает в MYSQL

Я новичок в MYSQL и не могу решить или даже с таким количеством ответов на этом форуме, не в состоянии идентифицировать ошибку в этом утверждении. Я использую базу данных MYSQL.

У меня есть 2 таблицы: Ratemaster и ставки, в которых у клиента может быть 1 продукт с разными ставками. Из-за этого происходит дублирование полей клиентов и продуктов, изменяется только поле ставки. Теперь Table Ratemaster имеет все поля: id, Customer code, Product, Rate, user тогда как в Таблицах есть только: id, cust code, Rate, user. - поле пользователя для проверки session_user.

Теперь таблица Ratemaster имеет 3 записи со всеми значениями поля, такими же, кроме поля Rate empty. Тарифы Тарифы имеют разные тарифы. Я хочу, чтобы все тарифы обновлялись в таблице Ratemaster из таблицы тарифов. Я не могу сделать это с помощью команды UPDATE и LIMIT mysql, она дает ошибку как:

Неправильное использование UPDATE и LIMIT

UPDATE Ratemaster, Rates 
SET Ratemaster.Rate=Rates.Rate 
WHERE Ratemaster.user=Rates.user 
LIMIT 1

Ответ 1

Обычно вы можете использовать LIMIT и ORDER в своих операторах UPDATE, но в вашем случае нет, как написано в MySQL Documentation 12.2. 10. Синтаксис UPDATE:

Для синтаксиса с несколькими таблицами UPDATE обновляет строки в каждой таблице с именем в table_references, которые удовлетворяют условиям. В этом случае ЗАКАЗАТЬ BY и LIMIT не могут быть использованы.

Попробуйте следующее:

UPDATE Ratemaster
SET Ratemaster.Rate =
(
    SELECT Rates.Rate
    FROM Rates
    WHERE Ratemaster.user = Rates.user
    ORDER BY Rates.id
    LIMIT 1
)

Ответ 2

Salam Вы можете использовать этот метод и работать правильно!

UPDATE Ratemaster, Rates 
SET Ratemaster.Rate=Rates.Rate 
WHERE Ratemaster.user=Rates.user 
ORDER BY Rates.id
LIMIT 1

Ответ 3

Прочитайте статью о Как использовать ORDER BY и LIMIT для обновления нескольких таблиц в MySQL

Для синтаксиса с несколькими таблицами UPDATE обновляет строки в каждой таблице с именем в table_references, которые удовлетворяют условиям. В этом случае ЗАКАЗАТЬ BY и LIMIT не могут быть использованы.

Ответ 4

* Используйте его ОБНОВИТЬ таблицу SET Sing = 'p' ORDER BY sr_no LIMIT 10;

Ответ 5

Проблема заключается в том, что LIMIT должен использоваться только с операторами SELECT, поскольку он ограничивает количество строк, возвращаемых запросом.

От: http://dev.mysql.com/doc/refman/5.5/en/select.html

Предложение LIMIT может использоваться для ограничения количества строк, возвращаемых оператор SELECT. LIMIT принимает один или два числовых аргумента, которые должны быть неотрицательными целочисленными константами, за этими исключениями:

Within prepared statements, LIMIT parameters can be specified using ? placeholder markers.

Within stored programs, LIMIT parameters can be specified using integer-valued routine parameters or local variables as of MySQL 5.5.6.

С двумя аргументами первый аргумент определяет смещение первая строка для возврата, а вторая указывает максимальное количество строки для возврата. Смещение начальной строки равно 0 (не 1):

SELECT * FROM tbl LIMIT 5,10; # Извлечение строк 6-15

Чтобы получить все строки с определенного смещения до конца результата set, вы можете использовать некоторое большое количество для второго параметра. Эта оператор извлекает все строки из 96-й строки до последней:

SELECT * FROM tbl LIMIT 95,18446744073709551615;

С помощью одного аргумента значение указывает количество возвращаемых строк от начала набора результатов:

SELECT * FROM tbl LIMIT 5; # Восстановить первые 5 строк

Другими словами, LIMIT row_count эквивалентен LIMIT 0, row_count.

В подготовленных заявлениях вы можете использовать заполнители. Следующие операторы возвращают одну строку из таблицы tbl:

SET @a = 1; ПОДГОТОВИТЬ STMT FROM 'SELECT * FROM tbl LIMIT?'; ВЫПОЛНИТЬ STMT ИСПОЛЬЗОВАНИЕ @a;

Следующие операторы вернут вторую в шестую строку из Таблица tbl:

SET @skip = 1; SET @numrows = 5; PREPARE STMT FROM 'SELECT * FROM tbl LIMIT?,? '; EXECUTE STMT ИСПОЛЬЗОВАНИЕ @skip, @numrows;

Для совместимости с PostgreSQL MySQL также поддерживает LIMIT Синтаксис смещения row_count OFFSET.

Если LIMIT встречается внутри подзапроса и также применяется во внешнем запрос, крайний LIMIT имеет приоритет. Например, следующий оператор создает две строки, а не одну:

(SELECT... LIMIT 1) LIMIT 2;