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 12:04 pm (UTC)
Нет, это мой дедик, стоит в Москве, в Курчатнике, кажется.

traceroute to 217.106.7.218 (217.106.7.218), 30 hops max, 40 byte packets
1 c3750-gw.agava.net (89.108.64.1) [AS39561] 0.423 ms 0.834 ms 1.010 ms
2 skymedia-po-gw.netflow.ru (88.212.194.49) [AS39134] 0.334 ms 0.405 ms 0.481 ms
3 msk46.msk151.transtelecom.net (217.150.45.186) [AS20485] 2.113 ms 2.131 ms 2.155 ms
4 transtele-gw.lnt.cw.net (166.63.222.66) [AS1273] 146.527 ms * 146.527 ms
5 ge-3-2-0-zcr2.lnt.cw.net (166.63.222.65) [AS1273] 79.381 ms 79.385 ms 79.415 ms
6 rtcomm-gw.lnt.cw.net (166.63.211.38) [AS1273] 67.827 ms 67.823 ms 68.502 ms
7 msk-bbn2-ge5-1-0-0.rt-comm.ru (217.106.0.153) [AS33934/AS8342] 118.148 ms 118.176 ms 118.213 ms
8 msk-scr1-tg3-1.rt-comm.ru (217.106.7.242) [AS33934/AS8342] 114.125 ms 114.550 ms msk-scr0-tg4-2.rt-comm.ru (217.106.6.157) [AS33934/AS8342] 114.578 ms
9 msk-scr2-tg1-1.rt-comm.ru (217.106.0.6) [AS33934/AS8342] 114.986 ms msk-scr2-tg1-3.rt-comm.ru (217.106.7.194) [AS33934/AS8342] 115.167 ms msk-scr2-tg1-1.rt-comm.ru (217.106.0.6) [AS33934/AS8342] 115.065 ms
10 217.106.1.146 (217.106.1.146) [AS33934/AS8342] 117.306 ms 117.379 ms 117.396 ms
11 msk-dsr1-ae0-804.rt-comm.ru (217.106.7.218) [AS33934/AS8342] 158.264 ms 158.249 ms 158.237 ms