#sql #sql-server #sql-server-2008 #sql-server-2005 #sql-server-2008-r2
#sql #sql-сервер #sql-server-2008 #sql-server-2005 #sql-server-2008-r2
Вопрос:
Я работаю с Sql Server 2008, у меня есть две таблицы и одна справочная таблица.table1 содержит ,
Id Name test1 test2
1 sss started processing
2 asdfasd started processing
таблица 2 содержит,
Id Name test1 test2
1 sss 2 2
2 asdfasd 3 2
справочная таблица имеет ,
code Name
1 Started
2 processing
3 stopped
я должен написать запрос на обновление, чтобы изменить значения таблицы 2 следующим образом,
Id Name test1 test2
1 sss 1 2
2 asdfasd 1 2
как написать запрос на обновление для описанного выше сценария?
Комментарии:
1. На основе данных Table1 вам нужно обновить Table2?
Ответ №1:
Пожалуйста, найдите пример ниже.
Вы можете сделать это в одном UPDATE
DECLARE @table1 Table (ID INT, NAME VARCHAR(100), test1 VARCHAR(100), test2 VARCHAR(100))
INSERT INTO @table1 SELECT 1, 'sss', 'started', 'processing'
INSERT INTO @table1 SELECT 2, 'asdfasd', 'started', 'processing'
DECLARE @table2 Table (ID INT, NAME VARCHAR(100), test1 INT, test2 INT)
INSERT INTO @table2 SELECT 1, 'sss', 2, 2
INSERT INTO @table2 SELECT 2, 'asdfasd', 3, 2
DECLARE @refTable Table (CODE INT, NAME VARCHAR(100))
INSERT INTO @refTable SELECT 1, 'Started'
INSERT INTO @refTable SELECT 2, 'processing'
INSERT INTO @refTable SELECT 3, 'stopped'
UPDATE T2
SET test1 = R1.Code,
test2 = R2.Code
FROM @table2 T2
INNER JOIN @table1 T1
ON T1.ID = T2.ID
INNER JOIN @refTable R1
ON T1.test1 = R1.Name
INNER JOIN @refTable R2
ON T1.test2 = R2.Name
SELECT *
FROM @table2