关于网友提出的“ 请教一个组合查询语句”问题疑问,本网通过在网上对“ 请教一个组合查询语句”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 请教一个组合查询语句描述:
表1中一个字段的值是表2中多个纪录的和,两个表有ID对应,如:
表1:
ID1 字段1
1 100
2 80
表2:
ID2 字段2
1 20
1 50
1 30
2 40
2 40
我的问题是,如果表2更新了,表1如何更新(不要用循环,数据多了就太慢了)。我想用一个SQL语句做,如下:
UPDATE 表1 SET 字段1 = (SELECT SUM(字段2) FROM 表2 WHERE ) WHERE
请问,他们的对应关系如何写(WHERE后的语句)?多谢各位!
解决方案1:
这有什麽困难的?
如果你的前台修改个了表2的某条记录,保存之後请执行下面SQL
var
CurrentCode,SQL:string;
begin
CurrentCode:=xxx.FieldByName('ID2').AsString;
SQL:=Format(
'UPDATE 表1 SET 字段1 = (SELECT SUM(字段2) FROM 表2 WHERE ID2=%s)WHERE
ID1=%s',[CurrentCode,CurrentCode]);
执行SQL语句;
end;
======================================================
如果在解发器内:
begin
declare @CurrentCode varchar(100),
select @CurrentCode=ID2 from deleted
UPDATE 表1 SET 字段1 = (SELECT SUM(字段2) FROM 表2 WHERE ID2=@CurrentCode)WHERE
ID1@CurrentCode
end
上面的代码没有在delphi和sql analizer内运行, 可能有语法错误,但思路正确!
delete table1
insert into table1 select field1,sum(field2) from table2 group by field1
确保两个表中的字段数量及名称完全一样
update 表1 set 字段1=b
from
(select id,sum(字段2) b from 表2) a
where id=a.id
没试,你看看
update 表1 set 字段1=(select sum(字段2) from 表2 where id2=id1 ) 这个样子是正确的
解决方案5:UPDATE 表1 SET 字段1 = SUM(表2.字段2) FROM 表1 AS T1,表2 AS T2 WHERE T1.ID1=T2.ID2
解决方案6: 如果是access数据库:(中间使用temp临时表)
select * into temp from (SELECT id2,SUM(字段2) as f2 FROM 表2 group by id2)//建立temp
UPDATE 表1,temp SET 表1.字段1=temp.f2 WHERE 表1.id1=temp.id2//更新表1
DROP TABLE temp //删除临时表temp
Create Table #T1 (ID Int,
aa int)
Create Table #T2 (ID Int,
bb int)
insert into #t1 select 1,0
union all select 2, 0
insert into #t2 select 1, 20
union all select 1, 50
union all select 1, 30
union all select 2, 40
union all select 2, 40
//以上为插入数据,删除临时表用DROP TABLE #T1
update #t1 set aa=(select sum(bb) from #t2 where #t1.id=#t2.id)
select * from #t1
UPDATE 表1 SET 字段1 = (SELECT SUM(字段2) FROM 表2 WHERE ID2=表1.ID1)
解决方案9: UPDATE 表1 SET 字段1 = (SELECT id2,SUM(字段2) FROM 表2 group by id2) WHERE 表1.id1=表2.id2
//随便这写的,没有试过....^_^