在SQL Server 2008中的单个命令中从单个表更新表的多个列

时间:2013-08-12 02:38:58

标签: sql-server sql-update

我有2张桌子,如下所述。

create table #tbl_1
    (
        nm varchar(20) not null,
        min_val float,
        max_val float,
        dept varchar(50)
    )

insert into #tbl_1(nm) values('A')  
insert into #tbl_1(nm) values('B')  
insert into #tbl_1(nm) values('C')

create table #tbl_2
    (
        nm varchar(20) not null,
        val float
    )

insert into #tbl_2 values('A', 10)
insert into #tbl_2 values('A', 20)
insert into #tbl_2 values('A', 30)
insert into #tbl_2 values('B', 50)
insert into #tbl_2 values('B', 40)
insert into #tbl_2 values('C', 15)
insert into #tbl_2 values('D', 60)
insert into #tbl_2 values('B', 65)

现在更新操作:

update #tbl_1 set min_val=(select min(val) from #tbl_2 where #tbl_1.nm=#tbl_2.nm)
update #tbl_1 set max_val=(select max(val) from #tbl_2 where #tbl_1.nm=#tbl_2.nm)

select * from #tbl_1
drop table #tbl_1
drop table #tbl_2

在我的真实表格中,#tbl_1有114列,他们正在从#tbl_2等17个不同的表中进行更新。因此,当我更新#tbl_1时,我必须执行113 SQL语句。 有什么办法可以只执行17个SQL语句或1个SQL语句来更新#tbl_1?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用联接进行更新:

update t1
    set min_val = t2.minval,
        max_val = t2.maxval
    from #tbl_1 t1 join
         (select t2.nm, min(t2.val) as minval, max(t2.val) as maxval
          from #tbl_2 t2
          group by t2.nm
         ) t2sum
         on t1.nm = t2sum.nm