1

こんにちは、他のテーブルに存在する値に基づいて 1 つのテーブルを更新したいと考えています。Join を使用して update ステートメントを作成できますが、実際にはそれを作成し、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
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]

編集古いスタイルのSQLWHERE結合を使用することで、「JOIN」キーワードを回避できると思いますが、これは実際には良い習慣ではありません。

...        
FROM t2, cte cte 
WHERE t2.[uid] = cte.[uid]

また、1つのテーブルのみを更新する限り、ビューのように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 に答える