如何根据另一个表中的记录更新表

时间:2012-01-06 11:45:24

标签: sql sql-server sql-server-2008 tsql

考虑这两个表:

tbl 1

Qsno      City  Status  Year    Month
--------------------------------------
1          01     3      1990     1
2          01     3      1990     1
1          02     3      1990     2
2          02     3      1990     2
1          03     3      1990     1
2          03     1      1990     1
3          03     1      1990     1

和:

tbl 2

Qsno      City  
---------------
 1          01   
 2          01   
 1          03   
 2          03   
 3          03   

Qsno + City是唯一的

好的,我想更新tbl1中有tbl2行并设置Month = 3的行。

我怎么能这样做?

感谢

2 个答案:

答案 0 :(得分:4)

update tbl1
set Month = 3
where exists
  (select *
   from tbl2
   where tbl1.Qsno = tbl2.Qsno and
         tbl1.City = tbl2.City)

答案 1 :(得分:1)

您也可以使用此

use tempdb
go

create table #tbl1 (Qsno int,City int, intMonth int)
create table #tbl2 (Qsno int,City int)

insert into #tbl1 values (1,2,1),(1,3,1),(2,2,1),(2,3,1),(3,1,1)
insert into #tbl2 values (1,2),(2,2)

UPDATE t1
SET intMonth=3
FROM #tbl1 t1
     JOIN #tbl2 t2 ON t1.Qsno=t2.Qsno AND t1.City=t2.City

SELECT * FROM #tbl1

DROP TABLE #tbl1
DROP TABLE #tbl2

不要使用MonthYearStatus等保留字作为表和列的名称,这样可以避免很多麻烦。