Помогите составить "простенький" SQL запрос
От: SeLo  
Дата: 26.04.16 07:18
Оценка:
Есть таблица (T1) которую нужно обновить

Поля ID, Status
Значения A, 1
B, 2
E, 3

Есть другая таблица (T2), которая содержит IDs:

Поля ID
Значения A
B
C

Нужно в T1 добавить или обновить записи согласно записям в таблице T2. При обновлении Status устанавливается на 1
Т.е. после обработки должно получится в T1:


Поля ID, Status
Значения A, 1 -- ничего не делали
B, 1 -- изменили статус
E, 3 -- ничего не делали
C, 1 -- добавили запись

Как такое проще всего сделать в T-SQL (SQl Server от 2005), а то что то через курсоры как-то сложно выходит.
Уверен можно очень просто следать.
Re: Помогите составить "простенький" SQL запрос
От: londinium Украина  
Дата: 26.04.16 08:16
Оценка: 4 (1)
Здравствуйте, SeLo, Вы писали:

SL>Есть таблица (T1) которую нужно обновить


SL>Поля ID, Status

SL>Значения A, 1
SL> B, 2
SL> E, 3

SL>Есть другая таблица (T2), которая содержит IDs:


SL>Поля ID

SL>Значения A
SL> B
SL> C

SL>Нужно в T1 добавить или обновить записи согласно записям в таблице T2. При обновлении Status устанавливается на 1

SL>Т.е. после обработки должно получится в T1:


SL>Поля ID, Status

SL>Значения A, 1 -- ничего не делали
SL> B, 1 -- изменили статус
SL> E, 3 -- ничего не делали
SL> C, 1 -- добавили запись

SL>Как такое проще всего сделать в T-SQL (SQl Server от 2005), а то что то через курсоры как-то сложно выходит.

SL>Уверен можно очень просто следать.

Если я Вас правильно понял, то у Вас два пути:
UPDATE T SET
T.STATUS=1
FROM DBO.T1 AS T
JOIN DBO.T2 AS X ON T.ID=X.ID

или
MERGE INTO dbo.T1 AS TGT
USING dbo.T2 AS SRC
ON TGT.ID=SRC.ID
WHEN MATCHED THEN UPDATE SET
TGT.STATUS=1
WHEN NO MATCHED THEN INSERT (ID,STATUS) VALUES(SRC.ID,1);
Re[2]: Помогите составить "простенький" SQL запрос
От: SeLo  
Дата: 26.04.16 08:28
Оценка:
L>Если я Вас правильно понял, то у Вас два пути:
L>UPDATE T SET
L>T.STATUS=1
L>FROM DBO.T1 AS T
L>JOIN DBO.T2 AS X ON T.ID=X.ID

L>или

L>MERGE INTO dbo.T1 AS TGT
L>USING dbo.T2 AS SRC
L>ON TGT.ID=SRC.ID
L>WHEN MATCHED THEN UPDATE SET
L>TGT.STATUS=1
L>WHEN NO MATCHED THEN INSERT (ID,STATUS) VALUES(SRC.ID,1);

Merge не подходит, т.к Server от 2005 версии
До скрипта с Update дошел сам, но спасибо за ваш вариант, теперь знаю что верно.
Скрипт для добавления новых выглядит так:

INSERT INTO T1 (ID, Status)
Select T2.ID, 1
FROM T2 LEFT JOIN jT1 ON T2.ID = jT1.ID WHERE jT1.ID IS NULL
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.