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:24 am (UTC)
TIME WARP! OH, SHI…

А может оно просто верит заголовку-опции timestamp?
Monday, August 31st, 2009 10:26 am (UTC)
вообще я был твёрдо убеждён, что оно показывает разницу между временем отправки пакета и получением ответа. надо будет почитать исходники..
Monday, August 31st, 2009 10:29 am (UTC)
я тоже был в этом уверен. ВНЕЗАПНО ntpdate?
Monday, August 31st, 2009 10:38 am (UTC)
Близлежащий ко мне линукс никаких IP таймстампов в icmp-пакетах не ставит.

Ethernet II, Src: Giga-Byt_21:b1:1a (00:14:85:21:b1:1a), Dst: Cisco_9f:2c:40 (00:11:5c:9f:2c:40)
Destination: Cisco_9f:2c:40 (00:11:5c:9f:2c:40)
Address: Cisco_9f:2c:40 (00:11:5c:9f:2c:40)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
Source: Giga-Byt_21:b1:1a (00:14:85:21:b1:1a)
Address: Giga-Byt_21:b1:1a (00:14:85:21:b1:1a)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
Type: IP (0x0800)
Internet Protocol, Src: 89.108.74.58 (89.108.74.58), Dst: 89.108.83.67 (89.108.83.67)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 84
Identification: 0x9b25 (39717)
Flags: 0x00
0... = Reserved bit: Not set
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: ICMP (0x01)
Header checksum: 0x8f2e [correct]
[Good: True]
[Bad : False]
Source: 89.108.74.58 (89.108.74.58)
Destination: 89.108.83.67 (89.108.83.67)
Internet Control Message Protocol
Type: 0 (Echo (ping) reply)
Code: 0 ()
Checksum: 0x5f1b [correct]
Identifier: 0x9b71
Sequence number: 28 (0x001c)
Data (56 bytes)

0000 e2 a6 9b 4a 9a 62 02 00 08 09 0a 0b 0c 0d 0e 0f ...J.b..........
0010 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f ................
0020 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f !"#$%&'()*+,-./
0030 30 31 32 33 34 35 36 37 01234567
Data: E2A69B4A9A62020008090A0B0C0D0E0F1011121314151617...

Да и вообще, не припомню, где они бы в реальной жизни применялись.
Monday, August 31st, 2009 10:43 am (UTC)
вот и мне странно всё это