使用 Case When Exists 子句进行更新
Update with the Case When Exists clause
我有两个 table。我需要用“1”和“0”更新一个 table 中的一列。在 E_ID 两列中匹配的位置为“1”,在第二个 table.
中不存在 E_ID 的位置为“0”
注意:第一个 table 包含所有 E_ID,第二个 table 包含 E_ID 的子集。两个故事中 E_ID 列的 None 都包含 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 在两个 table 中都匹配。
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
您没有将您的子查询关联到您的 UPDATE 查询(员工)。您可能认为您是通过 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
我有两个 table。我需要用“1”和“0”更新一个 table 中的一列。在 E_ID 两列中匹配的位置为“1”,在第二个 table.
中不存在 E_ID 的位置为“0”
注意:第一个 table 包含所有 E_ID,第二个 table 包含 E_ID 的子集。两个故事中 E_ID 列的 None 都包含 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 在两个 table 中都匹配。
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
您没有将您的子查询关联到您的 UPDATE 查询(员工)。您可能认为您是通过 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