Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Update t - аналог MS-овской конструкции в Оракле?  [new]
Beginner12345
Guest
здравствуйте.
Есть 2 таблички Главная-подчинённая.
В главной табличке хранятся суммы значений соответствующих полей по подчинённой табличке (их много).
Задача: восстановить суммы вглавной табличке.
Как выглядит в Оракле соответствующий оператор Update?

В MSSQL вот так:

update Alias  set A = Det.A, B = Det.B
from Main Alias inner join
  ( select f_key, sum(a) A, sum(b) B from Detale ) Det on Alias.key = Det.f_key
--where Alias.key = 5
13 авг 07, 15:52    [4517624]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4574
update a
set ( f1, f2 ) =
(select sum( t1 ), sum( t2 )
from b
where b.a_id = a.id )
13 авг 07, 15:59    [4517678]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
maxrus
Member

Откуда:
Сообщений: 28
update
set a=sum_a
(
   select  t.rowid,
             t.a,
(select sum(t2.sum) from t2 where t2.key=t.key) as sum_a             
   from    table t
   where  t.key = bla-bla-bla
)

update table t   
set a=(select sum(t2.sum) from t2 where t2.key=t.key)
where  t.key = bla-bla-bla
13 авг 07, 16:01    [4517699]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4574
или я не понял вопроса %) или что это было? )))))))))))
13 авг 07, 16:05    [4517724]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Советчикам: запомноие как "отче наш" и никогда не забывайте: при подобной организации update необходимо либо дописывать where exists, либо иметь четкие гарантии, что в таблице-источнике найдется строка для КАЖДОЙ из строк целевой таблицы.
Иначе потеряете данные.
13 авг 07, 16:06    [4517733]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4574
andrey_anonymous
Советчикам: запомноие как "отче наш" и никогда не забывайте: при подобной организации update необходимо либо дописывать where exists, либо иметь четкие гарантии, что в таблице-источнике найдется строка для КАЖДОЙ из строк целевой таблицы.
Иначе потеряете данные.

проверяльщику советую внимательнее прочитать задание "Задача: восстановить суммы вглавной табличке." т.е. при отсутствии дочерних строк итог действительно должен быть нул
13 авг 07, 16:11    [4517766]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Альт
andrey_anonymous
Советчикам: запомноие как "отче наш" и никогда не забывайте: при подобной организации update необходимо либо дописывать where exists, либо иметь четкие гарантии, что в таблице-источнике найдется строка для КАЖДОЙ из строк целевой таблицы.
Иначе потеряете данные.

проверяльщику советую внимательнее прочитать задание "Задача: восстановить суммы вглавной табличке." т.е. при отсутствии дочерних строк итог действительно должен быть нул

Ой не фаааакт
13 авг 07, 16:11    [4517770]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4574
%) ладно пойду я лучше домой... хватит работать %) строчной части документа нет... зато насчитанные итоги есть... дай бог прибавка к пенсии )
13 авг 07, 16:12    [4517780]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
RADDIM
Member

Откуда: Казахстан, Алматы
Сообщений: 109
ЧТО НАДО ДОПИСЫВАТЬ ПОСЛЕ WHERE EXISTS
13 авг 07, 16:14    [4517789]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
maxrus
Member

Откуда:
Сообщений: 28
Лучше не трогать того что трогать не надо
13 авг 07, 16:14    [4517793]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
RADDIM
ЧТО НАДО ДОПИСЫВАТЬ ПОСЛЕ WHERE EXISTS

Самый очевидный вариант - копию запроса, которая в SET (a,b) = (select ... WHERE...)
13 авг 07, 16:15    [4517801]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
RADDIM
Member

Откуда: Казахстан, Алматы
Сообщений: 109
Спасибо
13 авг 07, 16:16    [4517816]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
Beginner12345
Guest
maxrus

ничё не понял :)

[Альт ][/quot]
щаз попробую.
13 авг 07, 16:17    [4517826]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
maxrus
Member

Откуда:
Сообщений: 28
щаз позвоню и все объясню :)
13 авг 07, 16:19    [4517843]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
RADDIM
Member

Откуда: Казахстан, Алматы
Сообщений: 109
Есть это

update cbs_personel set (email) = (select email from cbs_kullanici where personel_numara=cbs_personel.personel_numara)
where exists (select email from cbs_kullanici where personel_numara=cbs_personel.personel_numara)

ошибка

ORA-01427: single-row subquery returns more than one row
13 авг 07, 16:20    [4517854]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
RADDIM
ошибка

ORA-01427: single-row subquery returns more than one row

Очевидно, в cbs_kullanici нашлось больше одного email по условию personel_numara=cbs_personel.personel_numaraю
Либо ограничивать, либо агрегировать, либо уточнять условия соединения
13 авг 07, 16:22    [4517881]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
Дубовая голова
Member [заблокирован]

Откуда: с цепи сорвался
Сообщений: 1821
RADDIM
Есть это
ошибка
ORA-01427: single-row subquery returns more than one row


Прочесть документацию, поискать по форуму или погуглить, конечно, не в наших силах ?

select email from cbs_kullanici where personel_numara=cbs_personel.personel_numara

возвращает больше одной строки.
13 авг 07, 16:27    [4517912]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
Beginner12345
Guest
Всем спасибо!
Приз за наиболее точный и быстрый ответ достается Альту
13 авг 07, 16:43    [4518071]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Beginner12345
Всем спасибо!
Приз за наиболее точный и быстрый ответ достается Альту


Ню-ню, не приведи господи с бабками работаете
SQL> select * from ane_a;

        ID         F1         F2
---------- ---------- ----------
         1          1         10
         2          2         20
         3          3         30
         4          4         40
         5          5         50
         6          6         60
         7          7         70
         8          8         80
         9          9         90

9 rows selected

SQL> select * from ane_b;

      A_ID         T1         T2
---------- ---------- ----------
         2          2         10
         1          1         20
         2          2         30
         1          1         40

SQL> update ane_a a
  2  set ( f1, f2 ) =
  3  (select sum( t1 ), sum( t2 )
  4  from ane_b b
  5  where b.a_id = a.id );

9 rows updated

SQL> select * from ane_a;

        ID         F1         F2
---------- ---------- ----------
         1          2         60
         2          4         40
         3            
         4            
         5            
         6            
         7            
         8            
         9            

9 rows selected

SQL> 
13 авг 07, 16:55    [4518202]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
Alto
Member

Откуда:
Сообщений: 144
Beginner12345
Всем спасибо!
Приз за наиболее точный и быстрый ответ достается Альту

ура... пойду за пивом ))
andrey_anonymous, работаю с деньгами... с бабками пусть работают усзн ) ты так и не понял смысла пересчета главной по подстрочной ) то, что ничего нет отражает то... что _действительно_ ничего нет )))))))))))))))))))
13 авг 07, 18:45    [4519027]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Alto
ты так и не понял смысла

Вы не только упорно отрицаете очевидное, но и учите людей плохому.
Идите лучше пивка попейте, деньги целее будут.
Надеюсь, Beginner12345 все-таки внял предупреждению.
Всем удачи.
13 авг 07, 19:07    [4519110]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Alto
andrey_anonymous, работаю с деньгами... с бабками пусть работают усзн ) ты так и не понял смысла пересчета главной по подстрочной ) то, что ничего нет отражает то... что _действительно_ ничего нет )))))))))))))))))))


andrey_anonymous говорит про то, что твой запрос похоже не соответствует тому, что написан в первом посте. А там явно прописан inner join, т.е. если я правильно его понял, он не сбрасывает суммы записей у которых где нет подчинённых. Т.е. неформальное описание задачи автором противоречит её решению на MSSQL.
13 авг 07, 19:36    [4519197]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4574
И какой глубинный смысл вкладывается в эти суммы? Следующей операцией идут проводки и формирование книги
14 авг 07, 03:52    [4519804]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
Beginner12345
Guest
mcureenab
Alto
andrey_anonymous, работаю с деньгами... с бабками пусть работают усзн ) ты так и не понял смысла пересчета главной по подстрочной ) то, что ничего нет отражает то... что _действительно_ ничего нет )))))))))))))))))))


andrey_anonymous говорит про то, что твой запрос похоже не соответствует тому, что написан в первом посте. А там явно прописан inner join, т.е. если я правильно его понял, он не сбрасывает суммы записей у которых где нет подчинённых. Т.е. неформальное описание задачи автором противоречит её решению на MSSQL.


В общем-то, вариант Альта больше похож на left join (если брать первоначальную постановку).
2 andrey_anonymous
Если бы в таблице ane_b был форейн-кей на ane_a, то такой ситуации не возникло бы.
14 авг 07, 08:57    [4520046]     Ответить | Цитировать Сообщить модератору
 Re: Update t - аналог MS-овской конструкции в Оракле?  [new]
Andrei Fomichev
Member

Откуда: Москва
Сообщений: 453
Альт
update a
set ( f1, f2 ) =
(select sum( t1 ), sum( t2 )
from b
where b.a_id = a.id )

вот так можно добиться поведения , аналогичного запросу в первом посте

update a 
set ( f1, f2 ) =
(select sum( t1 ), sum( t2 ) from b where b.a_id = a.id )
where exists(select 1 from b where b.a_id = a.id )
14 авг 07, 09:19    [4520132]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить