您好我想根据其他表中的值更新1表。我可以使用Join来编写更新语句,事实上我已经编写了它并使用Join工作。但出于好奇,我想使用CTE。我写了以下查询但它似乎不起作用。谁能告诉我这是什么问题? CTE最后强制要求Select语句吗?为什么我不能写Update语句?
WITH cte(uid, col1)
As
(
Select uid, col1
From [User]
)
Update t2
Set col1 = cte.col1
Where uid = cte.uid
答案 0 :(得分:1)
您仍然需要加入CTE,如此
WITH cte([uid], col1)
As
(
Select [uid], col1
From [User]
)
Update t2
Set col1 = cte.col1
FROM t2 inner join cte cte
on t2.[uid] = cte.[uid]
编辑我想你可以通过使用old-style SQL WHERE连接来避免'JOIN'关键字,但这不是一个很好的做法。
...
FROM t2, cte cte
WHERE t2.[uid] = cte.[uid]
另请注意,只要您只更新一个表格,您也可以通过CTE更新,例如视图。
WITH cte(userCol1, t2Col1)
As
(
Select [u].col1 as userCol1, t2.col1 as t2Col1
From [User] u
inner join t2
ON u.[uid] = t2.[uid]
)
Update cte
Set t2Col1 = userCol1