我有两张桌子。我需要使用' 1'更新一个表中的一列。和' 0'。拥有' 1'其中E_ID在两列中匹配,并且' 0'其中E_ID在第二个表中不存在。
注意:一个表具有所有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
答案 0 :(得分:4)
您尚未将子查询与UPDATE查询(Employees)相关联。你可能以为你是用你的JOIN做的,但实际上你只是创建了第二个单独的Employees引用,它与你的外部查询无关。
这应该有效:
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