Синтаксис для нескольких вкладок le update в MySQL отличается от SQL Server.
Вы можете использовать синтаксис, как это:
UPDATE ccs_multiples T2
JOIN (SELECT SUM(i.Amount) AS SumAmount
, i.SerialNumber
FROM ccs_multiples_items i
GROUP BY i.SerialNumber
) T1
ON T2.SerialNumber = T1.SerialNumber
SET T2.TotalAmount = T1.SumAmount
ПРИМЕЧАНИЯ:
В MySQL, то INNER
необязательное ключевое слово; его отсутствие не влияет на утверждение.
Но что бы вы хотели сделать с строками в ccs_multiples
, которые не имеют соответствующих строк в ccs_multiples_items
. Для того, чтобы установить TotalAmount
столбец к нулю этих строк, вы можете использовать внешнее соединение:
UPDATE ccs_multiples T2
LEFT
JOIN (SELECT SUM(i.Amount) AS SumAmount
, i.SerialNumber
FROM ccs_multiples_items i
GROUP BY i.SerialNumber
) T1
ON T2.SerialNumber = T1.SerialNumber
SET T2.TotalAmount = IFNULL(T1.SumAmount,0)
Одно замечание о синтаксисе MySQL, мы можем (обычно) преобразовать SELECT
заявление в UPDATE
заявление , Обычно я начинаю с SELECT
для проверки предикатов и выражений. Например:
SELECT T2.SerialNumber
, T2.TotalAmount AS existing_TotalAmount
, T1.SumAmount
, IFNULL(T1.SumAmount,0) AS new_TotalAmount
FROM ccs_multiples T2
LEFT
JOIN (SELECT SUM(i.Amount) AS SumAmount
, i.SerialNumber
FROM ccs_multiples_items i
GROUP BY i.SerialNumber
) T1
ON T2.SerialNumber = T1.SerialNumber
Мы можем проверить этот SELECT и убедиться, что выражения работают правильно. Для того, чтобы преобразовать его в операторе UPDATE, мы просто удалить SELECT ... FROM
от начала оператора, и заменить его UPDATE
и добавить статью в SET
до пункта WHERE
.
Опишите "* fail *". Любые сообщения об ошибках? Неожиданное поведение? –
** MySQL сказал: ** # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'FROM ccs_multiples как T2 INNER JOIN (SELECT SUM (Amount) as SumAmount, Seria' в строке 3 – Mark