Обновить оператор с несколькими таблицами и Order By и LIMIT в mySql

0

Когда я пытаюсь запустить инструкцию 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, он обновил бы все строки, которые существуют в таблице, без ошибок.

Теги:
limit
sql-order-by

1 ответ

0
Лучший ответ

Как описано в инструкции mysql в инструкции по обновлению:

Вы также можете выполнять операции UPDATE, охватывающие несколько таблиц. Однако вы не можете использовать ORDER BY или LIMIT с помощью UPDATE с несколькими таблицами.

Это означает, что вам нужно преобразовать оператор обновления нескольких таблиц в отдельные таблицы, чтобы выполнить операцию.

Из запроса мне кажется, что вы хотите получить одно значение (номер rate * number) из таблицы tbl_products.

Критерии выбора для меня непонятны, поскольку вы заказываете в поле, которое вы используете для присоединения, то есть поле будет иметь точно такое же значение для всех записей, и вы не будете использовать какую-либо агрегированную функцию с вашей группой. Это означает, что ваш подзапрос соответствует стандартам sql и работает только в mysql, потому что у вас нет единственной полной группы по настройке sql. Вы также не ссылаетесь на обновляемую запись, поэтому не представляете, как этот запрос относится к текущей записи.

Из-за этого я не могу предложить, как переписать соединение в подзапрос. Но это то, что вам нужно сделать: переписать свое соединение как подзапрос.

  • 0
    Спасибо, Шэдоу, я упростил часть (скорость * число) для публикации, так как расчет был очень длинным и запутанным. Я все еще не понимаю, как и где мне использовать подзапрос в моем коде, и я был бы признателен, если бы вы показали мне пример, который не должен быть точным. Просто идея об этом в «моем случае», так что я заставлю это работать на основе «моей ситуации».
  • 0
    Как я написал в своем ответе, я не могу предложить решение, потому что я не понимаю, чего вы хотите достичь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню