Запрос в mysql с подзапросом
Не работает. Где я ошибся?
"UPDATE asset
SET asset_sum = asset_sum + $paymentIncome - $paymentExpense
WHERE idasset = (SELECT idasset FROM asset ORDER BY idasset DESC LIMIT 1)");
update с вставленным вручную idasset работает. select отдельно тоже работает. Вместе не работает. Единственное, что приходит в голову, что и апдейт и селект из одной таблицы запрашиваются. что можно сделать?
Если упростить до такого , то работает
UPDATE asset
SET asset_sum = asset_sum + '$paymentIncome' - '$paymentExpense'
WHERE idasset = (59)
Вот так уже не работает:
UPDATE asset
SET asset_sum = asset_sum + '$paymentIncome' - '$paymentExpense'
WHERE idasset = (SELECT idasset FROM asset WHERE idasset = 59)
Дело в подзапросе. Что не так?
Ответы (2 шт):
А вы проверяли, подзапрос возвращает только одно значение, или может несколько? Если не одно, то UPDATE не может определить, какое значение использовать.
Как вариант:
UPDATE asset
SET asset_sum = asset_sum + $paymentIncome - $paymentExpense
WHERE idasset = (SELECT idasset FROM asset ORDER BY idasset DESC LIMIT 1)
Это будет последняя добавленная запись, если их несколько.
У Вас должно быть сообщение типа You can't specify target table 'asset' for update in FROM clause. Это случай описан в документации (https://dev.mysql.com/doc/refman/8.0/en/update.html). Не разрешено делать селект из той же таблицы, что и обновляемая.
Предлагается использовать multiple-table update, например, так:
UPDATE asset,(SELECT idasset maxid FROM asset ORDER BY idasset DESC limit 1) as SelIds
SET asset_sum = asset_sum + (paymentIncome - paymentExpense)
WHERE idasset = SelIds.maxid;