1

你好,我想根據其他表中存在的值更新1個表。我可以使用Join來寫更新語句,並且事實上我寫了它,它使用Join來工作。但出於好奇,我想使用CTE。我寫了下面的查詢,但它似乎不工作。有人可以告訴我這是什麼問題嗎? CTE是否強制要求Select語句?爲什麼我不能寫更新語句?如何編寫此CTE查詢?

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

回答

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加入避免「加入」的關鍵字,但是這ISN」真的很好的做法。

...   
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 
+0

噢,如果是這樣的話,我可以忽略CTE並用JOIN寫一個簡單的更新。 –