【发布时间】:2019-12-05 22:10:51
【问题描述】:
我目前正在学习如何在 SQL Server 2016 中使用 CTE,因为我有一些大表,我需要根据帮助列的匹配来更新一些列,我不完全确定它是如何完成的。我知道这也可以通过经典更新来完成,因为我现在想以 CTE 的方式学习和理解它,因为它会在不久的将来派上用场。
我有这个 Helper 表:
State ABR
Alabama AL
Alaska AK
Arizona AZ
我需要根据 state_short 和 ABR 之间的连接填写 State 列。
User State_short State
John AL NULL
Carl AK NULL
Ivan AZ NULL
Martin AZ NULL
William AK NULL
Sean AL NULL
Bob AL NULL
我试过这段代码:
WITH StateMatch AS
(
SELECT [State] AS StateName, [ABR] FROM [States]
)
UPDATE [Users]
SET [State] = StateName
FROM StateMatch
但这只会给我这个输出:
User State_short State
John AL Alabama
Carl AK Alabama
Ivan AZ Alabama
Martin AZ Alabama
William AK Alabama
Sean AL Alabama
Bob AL Alabama
我可以看到,我缺少一个连接,但我不确定如何使用 CTE - 它是在 CTE 中完成的,还是在下面的 select 子句中完成的,还是可以通过 where 子句完成?根据来自另一个帮助表的联接更新列的最佳和最简单的解决方案是什么?
【问题讨论】:
标签: sql sql-server