The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Подход к команде UPDATE"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Подход к команде UPDATE"
Сообщение от Lestat emailИскать по авторуВ закладки on 25-Май-04, 15:39  (MSK)
Объясните хотя бы примерный принцип выполнения данного запроса:

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Подход к команде UPDATE"
Сообщение от robmeister Искать по авторуВ закладки(ok) on 28-Май-04, 18:01  (MSK)
>Объясните хотя бы примерный принцип выполнения данного запроса:
>
>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, как видно, в подзапросе ничего не берется), надеясь
>на свою логику размышлений. Но правильна ли она.


podzapros vipolniaetsia nezavisimo i v roditelskom zaprose uchstvuet vsego lish skaliarnii rezultat podzaprosa (levii verxni element resultset).

poprobui tak:

update
b
set
b.debt_sum = b.debt_sum + t.minute_price * a.minutes_spoken
from
Tariff t, Account a , Clients c, Bill b
whereE b.userid = c.id and c.tariff = t.id and c.account = a.id

(opredelenie psevdonimov tablic neobiazatelno)

ne znaiu pravilno li ia ponial chto ti xochesh poluchit'.

(xot' s Oraclom i ne prixodilos' rabotat' - dai kakaia raznica - hlavnoe princip).

robmeister.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Подход к команде UPDATE"
Сообщение от Макс emailИскать по авторуВ закладки(??) on 30-Май-04, 13:58  (MSK)
Подзапросы обычно превращаются в джойны на момент построения плана исполнения запроса.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Подход к команде UPDATE"
Сообщение от robmeister Искать по авторуВ закладки(ok) on 30-Май-04, 20:18  (MSK)
>Подзапросы обычно превращаются в джойны на момент построения плана исполнения запроса.


deistvitelno - esli ukazat' globalni psevdonim roditelskogo tela zaprosa (b). a v protivnom sluchae - takogo ne proisxodit - i imia tablici interpretiruetsia kak nezavisimoe.

poprav' menia esli ia netochen - i esli tak to skaji v kakom RDMS ti eto proveril (poskolku eto konechno zavisit i ot sistemi upravlenia).

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру