需求:單一 UPDATE 陳述式,依關聯鍵從表 B 更新表 A 的三個欄位。關鍵在於正確使用 FROM + JOIN 並理解一對多/多對一語意差異。
USE tempdb
GO
CREATE TABLE #t1 (c1 INT NOT NULL, c2 CHAR(5), c3 CHAR(5), c4 CHAR(5))
CREATE TABLE #t2 (c1 INT NOT NULL, c2 CHAR(5), c3 CHAR(5), c4 CHAR(5))
GO
INSERT #t1 VALUES (1, 'hello', 'there', 'fred')
INSERT #t2 VALUES (1, 'how', 'are', 'you?')
GO
-- 跨表更新
UPDATE #t1
SET #t1.c2 = #t2.c2,
#t1.c3 = #t2.c3,
#t1.c4 = #t2.c4
FROM #t2
WHERE #t1.c1 = #t2.c1
SELECT * FROM #t1 -- 結果: c2=how, c3=are, c4=you?
FROM 中僅出現一次,可省略別名。UPDATE A SET ... FROM A JOIN B ON ... 形式。UPDATE ... FROM ... JOIN ... 是跨表更新標準寫法。**核心風險在於一對多關聯導致非確定性更新**。嚴格保證來源唯一性,並善用 CTE 預處理來源資料,才能安心使用。