November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Thursday, May 28th, 2009 12:06 pm

Помогите, не дайте умереть в неведении!

Как на ANSI SQL (или на Informix-диалекте) пишется _эффективный_ запрос на апдейт многих полей в одной таблице данными из другой таблицы?

Так работает, но по-моему, это сильно неэффективный метод:

UPDATE t1 SET
c1 = (SELECT c1 FROM t2 WHERE t2.id=t1.id),
c2 = (SELECT c2 FROM t2 WHERE t2.id=t1.id),
c3 = (SELECT c3 FROM t2 WHERE t2.id=t1.id),
...
WHERE id IN (SELECT id FROM t2);

Когда поле одно, это ещё ничего, а когда их десяток, это как-то некрасиво выглядит.

Upd: на информиксовском диалекте это пишется так:
UPDATE t1 SET (c1,c2,c3)=
((SELECT c1,c2,c3 FROM t2 WHERE t2.id=t1.id))

Двойные скобки у вложенного селекта существены.

Оригинал этой записи в личном блоге.

Monday, August 31st, 2009 10:39 am (UTC)
Народ не готов доплачивать за качество...
Monday, August 31st, 2009 10:44 am (UTC)
а кто и кому в данном случае должен доплатить, чтобы у меня сайты из Петерхоста быстрее грузились?
Monday, August 31st, 2009 11:21 am (UTC)
Не Вы, петерхост.
Monday, August 31st, 2009 12:30 pm (UTC)
Вероятно, ТТК ;-)) Кому же еще?
Monday, August 31st, 2009 02:49 pm (UTC)
тоже вариант )
Но я не уверен, что у них трафик из франкфурта в питер идет не через москву...
Monday, August 31st, 2009 04:27 pm (UTC)
да пофигу, как он идет, лишь бы не тормозил :)