我有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?
提前致谢。
答案 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