2016-05-19 68 views
1

我有兩個表。我需要用'1'和'0'更新一個表中的一列。 E_ID在兩列中匹配的'1'和E_ID在第二個表中不存在的'0'。
注意:一個表具有所有E_ID,第二個表具有E_ID的子集。兩個故事的E_ID列都不包含NULL。更新案例存在條款

下面的查詢只做工作的第一部分(更新爲'1')。

UPDATE [MIDASFactory].[dbo].[Employees] 
SET [Changed To Residential] = 1 
FROM ##formerEmployees t 
INNER JOIN [dbo].[Employees] (NOLOCK) 
    ON t.e_ID = E_ID 

我修改了上面的查詢,也用上面描述的'1'和'0'更新。

但它無法正常工作,因爲它將所有行更新爲下面查詢中select子句返回的第一個值 ,其中E_ID在兩個表中都匹配。

UPDATE [dbo].[Employees] 
SET [Current Employee] = 
    CASE WHEN EXISTS (SELECT * FROM [dbo].[Employees] P (NOLOCK) 
         LEFT OUTER JOIN ##formerEmployees t (NOLOCK) ON P.E_ID=t.e_ID) 
      THEN 1 
      ELSE 0 
     END 
FROM ##formerEmployees t 

回答

3

您還沒有將您的子查詢與您的UPDATE查詢(Employees)相關聯。你可能認爲你是用JOIN來做這件事的,但實際上你只是創建了第二個獨立的員工引用,這與你的外部查詢沒有關係。

這應該工作:

UPDATE e 
SET [Current Employee] = 
    CASE WHEN EXISTS (SELECT * FROM ##formerEmployees t (NOLOCK) WHERE e.E_ID=t.e_ID) 
      THEN 1 
      ELSE 0 
     END 
FROM [dbo].[Employees] e 
+0

感謝。工作完美。 – enigma6205