Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Update таблицу FROM та_же_таблица  [new]
6AP6APblCKA
Guest
Есть таблица tb1. Требуется изменить в записи с ID=TargetID один атрибут, взяв его значение из ТОЙ ЖЕ таблицы tb1, но у записи с ID=SourceID.

tb1:
ID Attribute1
----------------------
1 123
2 456
3 789

TargetID=1
SourceID=3

Результат:

tb1:
ID Attribute1
----------------------
1 789
2 456
3 789

Сейчас сделано так:

SELECT INTO #Source
FROM tb1
WHERE ID=SourceID

UPDATE tb1
SET Attribute1=#Source.Attribute1
FROM #Source
WHERE tb1.ID=TargetID

Работает, но хотелось бы не создавать временную таблицу. Пробовал так:

UPDATE tb1
SET T.Attribute=S.Attribute
FROM tb1 T, tb1 S
WHERE (T.ID=TargetID) AND (S.ID=SourceID)

Но это не пролазит, т.к. алясы таблиц смотрятся из строки UPDATE tb1 (а не из строки FROM), а таv писать алясы нельзя.
-----------
Помогите, пожалуйста. Заранее спасибо.
5 дек 05, 17:48    [2142565]     Ответить | Цитировать Сообщить модератору
 Re: Update таблицу FROM та_же_таблица  [new]
Sergej
Member

Откуда: Mainz, Germany
Сообщений: 316
UPDATE tb1
SET Attribute=(SELECT Attribute FROM tb1 WHERE ID=SourceID)
WHERE ID=TargetID
5 дек 05, 17:53    [2142585]     Ответить | Цитировать Сообщить модератору
 Re: Update таблицу FROM та_же_таблица  [new]
Glory
Member

Откуда:
Сообщений: 104760
UPDATE T
SET Attribute=S.Attribute
FROM tb1 T, tb1 S
WHERE (T.ID=TargetID) AND (S.ID=SourceID)
5 дек 05, 17:56    [2142593]     Ответить | Цитировать Сообщить модератору
 Re: Update таблицу FROM та_же_таблица  [new]
kvasimodo
Member

Откуда: Украина
Сообщений: 314
6AP6APblCKA

Но это не пролазит, т.к. алясы таблиц смотрятся из строки UPDATE tb1 (а не из строки FROM), а таv писать алясы нельзя.
-----------
Помогите, пожалуйста. Заранее спасибо.

Где, простите, нельзя писать алиасы?
UPDATE T  
   SET T.Attribute=S.Attribute
FROM tb1 T, tb1 S
  WHERE (T.ID=TargetID) AND (S.ID=SourceID)
5 дек 05, 17:59    [2142609]     Ответить | Цитировать Сообщить модератору
 Re: Update таблицу FROM та_же_таблица  [new]
6AP6APblCKA
Guest
А если этих атрибутов 10?
Я так тоже хотел, но пробовал писать это в FROM - не работало.
5 дек 05, 17:59    [2142610]     Ответить | Цитировать Сообщить модератору
 Re: Update таблицу FROM та_же_таблица  [new]
6AP6APblCKA
Guest
kvasimodo
6AP6APblCKA

Но это не пролазит, т.к. алясы таблиц смотрятся из строки UPDATE tb1 (а не из строки FROM), а таv писать алясы нельзя.
-----------
Помогите, пожалуйста. Заранее спасибо.

Где, простите, нельзя писать алиасы?
UPDATE T  
   SET T.Attribute=S.Attribute
FROM tb1 T, tb1 S
  WHERE (T.ID=TargetID) AND (S.ID=SourceID)


Вот так не работает, именно про это я и говорил. Он смотрит алясы из строчки
UPDATE T
5 дек 05, 18:01    [2142618]     Ответить | Цитировать Сообщить модератору
 Re: Update таблицу FROM та_же_таблица  [new]
6AP6APblCKA
Guest
Glory
UPDATE T
SET Attribute=S.Attribute
FROM tb1 T, tb1 S
WHERE (T.ID=TargetID) AND (S.ID=SourceID)


Так вроде работает!
Щас ещё попробую, напишу точно.
5 дек 05, 18:04    [2142628]     Ответить | Цитировать Сообщить модератору
 Re: Update таблицу FROM та_же_таблица  [new]
Sergej
Member

Откуда: Mainz, Germany
Сообщений: 316
6AP6APblCKA
А если этих атрибутов 10?
Я так тоже хотел, но пробовал писать это в FROM - не работало.


6AP6APblCKA
Требуется изменить в записи с ID=TargetID один атрибут
5 дек 05, 18:08    [2142643]     Ответить | Цитировать Сообщить модератору
 Re: Update таблицу FROM та_же_таблица  [new]
kvasimodo
Member

Откуда: Украина
Сообщений: 314
6AP6APblCKA
Вот так не работает, именно про это я и говорил. Он смотрит алясы из строчки
UPDATE T


Да? У меня почему-то работает.
create table tb1 (ID int identity, Attribute int)

insert tb1 
(Attribute)
select 123
union select 456
union select 789

declare @TargetID int
declare @SourceID int

set @TargetID=1
set @SourceID =3

UPDATE T  
   SET T.Attribute=S.Attribute
FROM tb1 T, tb1 S
  WHERE (T.ID=@TargetID) AND (S.ID=@SourceID)
select * from tb1
drop table tb1
5 дек 05, 18:08    [2142646]     Ответить | Цитировать Сообщить модератору
 Re: Update таблицу FROM та_же_таблица  [new]
6AP6APblCKA
Guest
Всё, дошло до меня наконец.
Glory и kvasimodo вы оба правы. Я не догадался писать аляс и в UPDATE.
Всем спасибо!
5 дек 05, 18:08    [2142648]     Ответить | Цитировать Сообщить модератору
 Re: Update таблицу FROM та_же_таблица  [new]
6AP6APblCKA
Guest
Sergej
6AP6APblCKA
А если этих атрибутов 10?
Я так тоже хотел, но пробовал писать это в FROM - не работало.


6AP6APblCKA
Требуется изменить в записи с ID=TargetID один атрибут


Сначала один, потом возник второй вопрос - два атрибута :)
На самом деле, пример хотел попроще привести, неудачный немножко получился.
5 дек 05, 18:11    [2142654]     Ответить | Цитировать Сообщить модератору
 Re: Update таблицу FROM та_же_таблица  [new]
6AP6APblCKA
Guest
Btw, как у вас тут всё оперативно, я даже отвечать не успеваю.
5 дек 05, 18:16    [2142669]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить