Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Чем плох такой update?  [new]
bloodrain
Member

Откуда:
Сообщений: 107
Какие проблемы могут возникнуть при таком update

update table1 t
set val1 = ( select val2 from table2 t2 where t2.id = t.id )


?
4 сен 12, 14:57    [13111916]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
bloodrain
Какие проблемы могут возникнуть при таком update

update table1 t
set val1 = ( select val2 from table2 t2 where t2.id = t.id )


?

1.no_data_found
2.производительность
4 сен 12, 15:08    [13111995]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
orawish
bloodrain
Какие проблемы могут возникнуть при таком update

update table1 t
set val1 = ( select val2 from table2 t2 where t2.id = t.id )


?

1.no_data_found или > 1, разумеется
2.производительность
4 сен 12, 15:10    [13112012]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
ORA__SQL
Member

Откуда: Moscow
Сообщений: 1774
orawish
orawish
пропущено...

1.no_data_found или > 1, разумеется
2.производительность
no_data_found не будет, а too many rows вполне может быть
4 сен 12, 15:15    [13112055]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
ORA__SQL
orawish
пропущено...
no_data_found не будет, а too many rows вполне может быть
too many rows (-1422) не будет, а "ORA-01427: single-row subquery returns more than one row" вполне может быть
4 сен 12, 15:49    [13112399]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
bloodrain
Member

Откуда:
Сообщений: 107
orawish
2.производительность


Как обойти тогда если нужна выборка по ид из другой таблицы?
4 сен 12, 16:05    [13112524]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
_Alex_SMIRNOV_
Member

Откуда: Киев
Сообщений: 1519
bloodrain
orawish
2.производительность


Как обойти тогда если нужна выборка по ид из другой таблицы?


1. UPDATE + SELECT (есть ряд ограничений в Oracle)
2. MERGE
4 сен 12, 16:11    [13112589]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
bloodrain
orawish
2.производительность


Как обойти тогда если нужна выборка по ид из другой таблицы?

merge
4 сен 12, 16:12    [13112594]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
bloodrain
orawish
2.производительность


Как обойти тогда если нужна выборка по ид из другой таблицы?
merge всегда будет не хуже. может быть лучше.
4 сен 12, 16:12    [13112602]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Консистентность с рестартами
4 сен 12, 16:12    [13112609]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
bloodrain
Member

Откуда:
Сообщений: 107
_Alex_SMIRNOV_
bloodrain
пропущено...


Как обойти тогда если нужна выборка по ид из другой таблицы?


1. UPDATE + SELECT (есть ряд ограничений в Oracle)
2. MERGE


А можно пример?
4 сен 12, 16:18    [13112657]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
ORA__SQL
Member

Откуда: Moscow
Сообщений: 1774
dbms_photoshop
ORA__SQL
пропущено...
no_data_found не будет, а too many rows вполне может быть
too many rows (-1422) не будет, а "ORA-01427: single-row subquery returns more than one row" вполне может быть
Точняк. Респект.
4 сен 12, 16:20    [13112675]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
_Alex_SMIRNOV_
Member

Откуда: Киев
Сообщений: 1519
bloodrain
_Alex_SMIRNOV_
пропущено...


1. UPDATE + SELECT (есть ряд ограничений в Oracle)
2. MERGE


А можно пример?


уже было много раз
4 сен 12, 16:28    [13112739]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
bloodrain
Member

Откуда:
Сообщений: 107
_Alex_SMIRNOV_
bloodrain
пропущено...


А можно пример?


уже было много раз


Если вы про:
update
(
  select ... from a,b
  where a.id = b.id
)
set a.val1 = b.bal2


То тогда нужны права на Update на обе таблицы.
4 сен 12, 16:46    [13112916]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
Mara88
Member

Откуда:
Сообщений: 13
bloodrain
Какие проблемы могут возникнуть при таком update

update table1 t
set val1 = ( select val2 from table2 t2 where t2.id = t.id )


?


здесь обновляются все значения столбца val1 (таблица table1) на одно значение, то есть на самое конечное значение столбца val2 (таблица 2).
например: ДО_______________________После
таблица 1__________таблица 2_______________________ таблица 1__________таблица 2
ID____ VAL1________ID____ VAL2_______________________ ID____VAL1________ID____VAL2
1 ____ aaa__________2 ____fff _________________________ 1____ggg__________2____fff
2 ____ bbb__________3____ggg ________________________ 2____ggg__________3____ggg
3 ____ ccc__________4____hhh ________________________ 3____ggg__________4____hhh

нет возможности проверить запрос на практике, но я уверен что результат такой
4 сен 12, 18:42    [13113698]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
Mara88
Member

Откуда:
Сообщений: 13
bloodrain,

правильнее будет использовать еще EXISTS
update table1 t
set val1 = ( select val2 from table2 t2 where t2.id = t.id )
WHERE EXISTS ( select val2 from table2 t2 where t2.id = t.id )


тогда должен быть правильный результат
____________ДО_________________________________________________После
таблица 1__________таблица 2_______________________ таблица 1__________таблица 2
ID____ VAL1________ID____VAL2_______________________ID____VAL1________ID____VAL2
1 ____ aaa__________2 ____fff__________________________1____ааа__________2____fff
2 ____ bbb__________3____ggg ________________________2____fff____________3____ggg
3 ____ ccc__________4____hhh ________________________3____ggg__________4____hhh

нет возможности проверить запрос на практике, но я уверен что результат такой
4 сен 12, 18:51    [13113719]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Mara88
bloodrain
Какие проблемы могут возникнуть при таком update

update table1 t
set val1 = ( select val2 from table2 t2 where t2.id = t.id )



?


здесь обновляются все значения столбца val1 (таблица table1) на одно значение, то есть на самое конечное значение столбца val2 (таблица 2).
например: ДО_______________________После
таблица 1__________таблица 2_______________________ таблица 1__________таблица 2
ID____ VAL1________ID____ VAL2_______________________ ID____VAL1________ID____VAL2
1 ____ aaa__________2 ____fff _________________________ 1____ggg__________2____fff
2 ____ bbb__________3____ggg ________________________ 2____ggg__________3____ggg
3 ____ ccc__________4____hhh ________________________ 3____ggg__________4____hhh

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

как пришли к такому умозаключению?
4 сен 12, 18:55    [13113733]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54383
если Оракл 9-ой версии, то надо учесть, что MERGE там кривоват

если чисто для апдейта - все равно придется левый INSERT лепить и при этом следить, чтобы лишнего не втсавить
4 сен 12, 21:15    [13114179]     Ответить | Цитировать Сообщить модератору
 Re: Чем плох такой update?  [new]
Lecter
Member

Откуда: Киев
Сообщений: 2032
xtender
как пришли к такому умозаключению?


Видимо "книгу не читал но осуждаю".
5 сен 12, 10:23    [13115600]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить