Обновить значение из справочной таблицы

#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