關於使用多表做update的語法

kitesky發表於2005-01-23

一、當用一個表中的資料來更新另一個表中的資料,T-SQL提供多種寫法(下面列出了二種),但建議用第一種寫法,雖然傳統,但結構清晰。
並且要注意,當用一個表中的資料來更新另一個表中的資料時,二個表一定要有關聯!

1.
update  t1 set t1.c2 = t2.c2
from  t2
where  t1.c1 = t2.c1

2.
Update  t1 set t1.c2 = t2.c2
from  t1 inner join t2 on t1.c1 = t2.c1

二、FROM 子句中指定的表的別名不能作為 SET column_name 子句中被修改欄位的限定符使用。例如,下面的內容無效:
UPDATE titles
    SET t.ytd_sales = t.ytd_sales + s.qty
    FROM titles t, sales s
    WHERE t.title_id = s.title_id
    AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)

若要使上例合法,請從列名中刪除別名 t 或使用本身的表名。
1.
UPDATE titles
    SET ytd_sales = t.ytd_sales + s.qty
    FROM titles t, sales s
    WHERE t.title_id = s.title_id
    AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)
2.
UPDATE titles
    SET titles.ytd_sales = t.ytd_sales + s.qty
    FROM titles t, sales s
    WHERE t.title_id = s.title_id
    AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-787708/,如需轉載,請註明出處,否則將追究法律責任。

相關文章