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

May 28th, 2009

dil: (Default)
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))

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

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

dil: (Default)
Thursday, May 28th, 2009 05:14 pm

А вот кто-нибудь может объяснить, что делает аксессовская функция datediff(“w”,,)?
Если я правильно понял описание, то она возвращает разницу между двумя временнЫми метками в… днях недели.

И конечно, я наткнулся на кусок кода, который ЭТО использует. Если найду автора, обязательно опубликую его мысли на тему, зачем ему это понадобилось.

А пока вопрос к залу: правильно ли я понял смысл этого параметра, и как ЭТО записать  в человеческих терминах?

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

Tags: