如何编写此CTE查询?

时间:2012-06-05 04:12:26

标签: sql sql-server sql-server-2008 rdbms common-table-expression

您好我想根据其他表中的值更新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

1 个答案:

答案 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