Объясните хотя бы примерный принцип выполнения данного запроса:
UPDATE Bill
SET debt_sum = debt_sum + (
SELECT Tariff.minute_price * Account.minutes_spoken
FROM Tariff, Account, Clients, Bill
WHERE Bill.userid = Clients.id
AND Clients.tariff = Tariff.id
AND Clients.account = Account.id
)
Сначала берется атрибут debt_sum первого кортежа таблицы Bill, после чего Оракл (под него все прогается) лезет по таблицам Tariff, Account, Clients и Bill
и собирает длинный кортеж (может какую-то внутреннюю структуру, не суть важно) из всех атрибутов таблиц !следующим! образом: берется первый кортеж таблицы Bill, потом находится кортеж в таблице Clients, т.ч. Bill.userid = Clients.id и т.д. !по порядку!? Я все это говорю к чему, в подзапросе все очевидно и явным образом описаны все соединения через FK и PK, исключительно. Но в UPDATE'е нет. Если все делается по порядку, то фактически получается что из UPDATE'а берется, как я говорил выше, "атрибут debt_sum !первого! кортежа таблицы Bill", затем !первый! кортеж таблицы Bill, из него берется userid, соединяется с Clients, потом второй debt_sum, и второй userid и т.д. "Bill.userid = Clients.id" я для того и добавил (из Bill, как видно, в подзапросе ничего не берется), надеясь на свою логику размышлений. Но правильна ли она.