MS SQL Server下的多表关联Update问题

时间:2022-05-26 13:27:58
诸位,我在MS SQLServer 7/2000下作下述操作:

Tmp001(int1 int,int2 int);
int1    int2
----    ----
1       100

Tmp002(int1 int,int2 int);
int1    int2
----    ----
1       1
1       2
执行
Update T1
Set
T1.int2=T1.int2-T2.int2
from 
Tmp001 T1,Tmp002 T2
Where T1.int1=T2.int2
得到
int1    int2
----    ----
1       99
,请问大家如何能够得到
int1    int2
----    ----
1       97
请不要使用先求和的形式,别的SQL 系统(如Oracle,sybase)中有无同样病况。



10 个解决方案

#1


关注

#2


Update T1
Set
T1.int2=int2-(select sum(int2) as int2 from T2 where T2.int1=T1.int1)

你原来是不是写错了?
Update T1
Set
T1.int2=T1.int2-T2.int2
from 
Tmp001 T1,Tmp002 T2
Where T1.int1=T2.int2
                   ^^这里是不是应该是T2.int1?


#3


To Naiwer(海阔天空),是描述语句写错了,但是多表关联一对多的更新问题没有错。
Update T1
Set
T1.int2=T1.int2-T2.int2
from 
Tmp001 T1,Tmp002 T2
Where T1.int1=T2.int1
                  ^^这里是T2.int1!
大家看看怎末解决,当然对于这个简单的例子,求和后肯定是可以解决的,但是换种复杂的情况,例如还有别的字段参与运算,处理起来简直是没有办法了。



#4


学习。

#5


大家关注一下吧

#6


沉底了

#7


啊啊啊啊啊

#8


试过这个语句没有:
Update T1
Set
T1.int2=int2-(select sum(int2) as int2 from T2 where T2.int1=T1.int1)

我想只能用先求和的形式!

#9


求解呀,不是我不想用求和,有时候不能用

#10


算了,我放弃了,谢谢大家的参与

#1


关注

#2


Update T1
Set
T1.int2=int2-(select sum(int2) as int2 from T2 where T2.int1=T1.int1)

你原来是不是写错了?
Update T1
Set
T1.int2=T1.int2-T2.int2
from 
Tmp001 T1,Tmp002 T2
Where T1.int1=T2.int2
                   ^^这里是不是应该是T2.int1?


#3


To Naiwer(海阔天空),是描述语句写错了,但是多表关联一对多的更新问题没有错。
Update T1
Set
T1.int2=T1.int2-T2.int2
from 
Tmp001 T1,Tmp002 T2
Where T1.int1=T2.int1
                  ^^这里是T2.int1!
大家看看怎末解决,当然对于这个简单的例子,求和后肯定是可以解决的,但是换种复杂的情况,例如还有别的字段参与运算,处理起来简直是没有办法了。



#4


学习。

#5


大家关注一下吧

#6


沉底了

#7


啊啊啊啊啊

#8


试过这个语句没有:
Update T1
Set
T1.int2=int2-(select sum(int2) as int2 from T2 where T2.int1=T1.int1)

我想只能用先求和的形式!

#9


求解呀,不是我不想用求和,有时候不能用

#10


算了,我放弃了,谢谢大家的参与