Sql server 的update語句的新認識

舟之橋發表於2013-01-30

一般的update語句的用法為

update test set xxx = 'xxx' where id = 'xxx'
update test set xxx = 'xxx' where id = (子查詢)

除了這兩種形式,但不知還有這種形式

建表語句:

create table tb1(
  id int primary key identity(1,1),
  salary int
)
GO
insert into tb1(salary) values(100)
insert into tb1(salary) values(200)
GO
create table tb2(
  id int primary key identity(1,1),
  tb1_id int references tb1(id),
  salary int
)
GO
insert into tb2(tb1_id) values(1)
insert into tb2(tb1_id) values(2)


資料庫中的資料:

tb1

==================

id       salary

---------------------------------

1          100

2          200

---------------------------------

tb2

==================

id        tb1_id       salary

---------------------------------

1              1            null

2               2           null

---------------------------------

要改為的結果:

tb2

==================

id        tb1_id       salary

---------------------------------

1              1            100

2               2           200

---------------------------------

sql為:

UPDATE tb2
SET tb2.salary = tb1.salary
FROM tb2 
INNER JOIN tb1 
ON (tb2.tb1_id=tb1.id)

(ps: 只有sql server才支援這種語法,oracle中是不支援的)

這種形式非常有用,以前做跨表更新是都是用檢視來做的,沒想到居然可以這樣。

在oracle有變通的實現方法: http://www.cnblogs.com/JasonLiao/archive/2009/12/23/1630895.html

相關文章