1

您好,我想根据其他表中存在的值更新 1 个表。我可以使用 Join 来编写更新语句,事实上我已经编写了它并且它使用 Join 工作。但出于好奇,我想使用 CTE。我写了以下查询,但它似乎不起作用。谁能告诉我问题是什么?CTE 是否强制要求最后的 Select 语句?为什么我不能写更新语句?

WITH cte(uid, col1)
As
(
    Select uid, col1
        From [User]
)
Update t2
    Set col1 = cte.col1
        Where uid = cte.uid
4

1 回答 1

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]

编辑我想您可以通过使用旧式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
于 2012-06-05T04:17:56.020 回答