Когда я пытаюсь запустить инструкцию update с несколькими таблицами и Order By и LIMIT в mySql, как показано ниже,
CREATE TRIGGER 'Percent' AFTER INSERT ON 'tbl_products'
FOR EACH ROW BEGIN
UPDATE
tbl_product_rate t1,
( SELECT tbl_products.id, (rate * number) AS prt
FROM tbl_products left join tbl_products_rate on tbl_products.id = tbl_products_rate.id GROUP BY id
) t2
SET
t1.option = t2.prt
WHERE
t1.id = t2.id ORDER BY t1.id LIMIT 1;
END
У меня есть ошибка, как показано ниже,
[Last executed query: EXECUTE mdb2_statement_mysql_142db9909b0277f32407f2a5d4da240eabf37dd822 USING @0]
[Native code: 1221]
[Native message: Incorrect usage of UPDATE and ORDER BY]
Может ли кто-нибудь сказать мне, как исправить вышеупомянутую инструкцию обновления, чтобы порядок и предел можно было использовать для оператора обновлений с несколькими таблицами?
ps Если я запустил оператор обновления без ORDER BY и LIMIT, он обновил бы все строки, которые существуют в таблице, без ошибок.
Как описано в инструкции mysql в инструкции по обновлению:
Вы также можете выполнять операции UPDATE, охватывающие несколько таблиц. Однако вы не можете использовать ORDER BY или LIMIT с помощью UPDATE с несколькими таблицами.
Это означает, что вам нужно преобразовать оператор обновления нескольких таблиц в отдельные таблицы, чтобы выполнить операцию.
Из запроса мне кажется, что вы хотите получить одно значение (номер rate * number
) из таблицы tbl_products
.
Критерии выбора для меня непонятны, поскольку вы заказываете в поле, которое вы используете для присоединения, то есть поле будет иметь точно такое же значение для всех записей, и вы не будете использовать какую-либо агрегированную функцию с вашей группой. Это означает, что ваш подзапрос соответствует стандартам sql и работает только в mysql, потому что у вас нет единственной полной группы по настройке sql. Вы также не ссылаетесь на обновляемую запись, поэтому не представляете, как этот запрос относится к текущей записи.
Из-за этого я не могу предложить, как переписать соединение в подзапрос. Но это то, что вам нужно сделать: переписать свое соединение как подзапрос.