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

Откуда:
Сообщений: 318
КАК поле coments update-ить в таблице 1 по такому же id из таблицы 2
помогите плиз - неохота merge-м
18 янв 07, 17:31    [3662525]     Ответить | Цитировать Сообщить модератору
 Re: запрос UPDATE  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116213
update tab1
set comments = (select comments from tab2 where id = tab1.id)
where exists (select null from tab2 where id = tab1.id)
/
18 янв 07, 17:33    [3662543]     Ответить | Цитировать Сообщить модератору
 Re: запрос UPDATE  [new]
Олег_Сл
Member

Откуда: Санкт-Петербург
Сообщений: 123
А подробнее...


===========================================================================
Я никогда не говорю: "Мне нужно, чтобы вы это сделали". Я говорю: "Мне интересно, сумеете ли вы это сделать". Генри Форд
18 янв 07, 17:33    [3662545]     Ответить | Цитировать Сообщить модератору
 Re: запрос UPDATE  [new]
alient
Member

Откуда:
Сообщений: 318
да работатет большое спасибо
(но смысл select null пожалуста прокоментируйте если можно?????)
18 янв 07, 18:14    [3662885]     Ответить | Цитировать Сообщить модератору
 Re: запрос UPDATE  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
alient
(но смысл select null пожалуста прокоментируйте если можно?????)
если возник такой вопрос, то Вам скорей смысл exists нужно комментировать. exists смотрит наличие строки, но не те поля(или значения), которые возвращаются в этой строке, поэтому практически все равно, что писать в clause select, null ничем не хуже чего-нибудь другого.
18 янв 07, 18:20    [3662937]     Ответить | Цитировать Сообщить модератору
 Re: запрос UPDATE  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116213
alient
да работатет большое спасибо
(но смысл select null пожалуста прокоментируйте если можно?????)


Если Вы обратили внимание, мы в этом selecte дублируем запрос из set.
Этим мы гарантируем , что обновим только те записи, которые нужно.
В противном случае все значения comment, не имеющие соответствия
в таблице 2, сбросятся в null.

Отмечу также, что в частных случаях это условие может быть избыточным.
18 янв 07, 18:21    [3662945]     Ответить | Цитировать Сообщить модератору
 Re: запрос UPDATE  [new]
waspwort
Member

Откуда: Тамбов-сити
Сообщений: 325
dmidek
update tab1
set comments = (select comments from tab2 where id = tab1.id)
where exists (select null from tab2 where id = tab1.id)
/


Интересно, зачем еще и exists? Почему бы не просто
nvl((select comments from tab2 where id = tab1.id), comments)
18 янв 07, 20:43    [3663568]     Ответить | Цитировать Сообщить модератору
 Re: запрос UPDATE  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Иногда можно и так:

update (
  select t1.comment c1, t2.comment c2
  from tab1, tab2
  where tab1.id = tab2.id
)set c1 = c2;
18 янв 07, 20:47    [3663576]     Ответить | Цитировать Сообщить модератору
 Re: запрос UPDATE  [new]
Elic
Member

Откуда:
Сообщений: 29988
waspwort
Интересно, зачем еще и exists? Почему бы не просто
nvl((select comments from tab2 where id = tab1.id), comments)
Потому что эта "простота" выльется в напрасную трату всевозможнейших ресурсов сервера при "необновляющем" обновлении.
19 янв 07, 02:02    [3664027]     Ответить | Цитировать Сообщить модератору
 Re: запрос UPDATE  [new]
waspwort
Member

Откуда: Тамбов-сити
Сообщений: 325
Elic
waspwort
Интересно, зачем еще и exists? Почему бы не просто
nvl((select comments from tab2 where id = tab1.id), comments)
Потому что эта "простота" выльется в напрасную трату всевозможнейших ресурсов сервера при "необновляющем" обновлении.


Я это уже понял (после того, как сообщение запостил :) ).
Тогда уж и еще одну проверку надо в exists добавить. Что-то вроде

where exists (select null from tab2 where id = tab1.id and tab2.comments <> tab1.comments and tab2.comments is not null)
19 янв 07, 15:18    [3667623]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить