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

Откуда:
Сообщений: 44
мне нужно проапдейтить одну таблицу по другой, по перечню ключевых полей
Если делать тупо в лоб:
update tmp t1 set (name, value) =
(select t2.name, t2.value from tmp1 t2 where t2.code = t1.code)

- то апдейтется ВСЕ поля, а не только те, где t2.code = t1.code

Выражение для t2.code = t1.code может быть из нескольких полей, естественно. Нужно написать
SQL, который проапдейтит только те записи, у которых ключ существуе в tmp1. Но как?..
10 сен 12, 13:40    [13139973]     Ответить | Цитировать Сообщить модератору
 Re: Update  [new]
qwerty112
Guest
sinnah
Если делать тупо в лоб:
update tmp t1 set (name, value) =
(select t2.name, t2.value from tmp1 t2 where t2.code = t1.code)

- то апдейтется ВСЕ поля, а не только те, где t2.code = t1.code
..

да ты гониш !
эта херь никогда не выполнится !
---
update tmp t1 inner tmp1 t2 on t2.code = t1.code
set ...
10 сен 12, 13:43    [13139990]     Ответить | Цитировать Сообщить модератору
 Re: Update  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
sinnah
мне нужно проапдейтить одну таблицу по другой, по перечню ключевых полей
Если делать тупо в лоб:
update tmp t1 set (name, value) =
(select t2.name, t2.value from tmp1 t2 where t2.code = t1.code)

- то апдейтется ВСЕ поля, а не только те, где t2.code = t1.code

Выражение для t2.code = t1.code может быть из нескольких полей, естественно. Нужно написать
SQL, который проапдейтит только те записи, у которых ключ существуе в tmp1. Но как?..
1. Показанный запрос выполниться не может в принципе,
ибо в MSQSL алиасы объявляются во FROMе (кроме MERGE) и векторных операций пока что нет.
Может, это в Oracle так можно...
2. В UPDATE для таких случаев предусмотрен FROM. Туда надо прописать JOIN двух таблиц по ключевым полям с алиасами.
10 сен 12, 13:45    [13140005]     Ответить | Цитировать Сообщить модератору
 Re: Update  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Тут вам не Oracle.
update t1
 set
  name = t2.name,
  value = t2.value
from
 tmp t1 join
 tmp1 t2 on t2.code = t1.code
10 сен 12, 13:47    [13140024]     Ответить | Цитировать Сообщить модератору
 Re: Update  [new]
sinnah
Member

Откуда:
Сообщений: 44
Всем спасибо. Вопрос закрыт.
10 сен 12, 13:54    [13140079]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить