:SQL Server一对多多表关联Update问题(100分)

9

9527

Unregistered / Unconfirmed
GUEST, unregistred user!
[^]
代码:
诸位,我在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.int1
得到
int1 int2
---- ----
1 99
,请问大家如何能够得到
int1 int2
---- ----
1 97
请不要使用先求和的形式,别的SQL 系统(如Oracle,sybase)中有无同样病况。无论如何,我觉得SQL Server返回99是非常不负责任的。
 
看来它只取了一行。
 
是呀,但是为什么呀,随便取一行是不合适的吧
 
有无人知???!!![^][?][:D]
 
为什么不能先求和呢?我觉得实际上你就是要求Sql Server做如下语句的运算,又不写出来
而想让Sql Server自己判断,我觉得不太容易
Update T1 Set T1.int2=T1.int2-T2.int2
from Tmp001 T1,
(select int1,int2=sum(int2)
from Tmp002 group by int1) as T2
Where T1.int1=T2.int1
 
to llh_lily
那么你觉得SQL Server无法处理这种情况了,(从目前的结果看)它仅仅是(按照存储顺序?)匹配了一条记录,我觉得他这种处理很不严格呀,不太了解SQL内部的处理机制,但是我觉得按照常规的思路,应该是能够得到97的值的。
 
我不知在你的Tmp001表中int1是否唯一。若不是唯一的那情况就比较复杂了。
我认为这种语句的确是比较容易引起歧义的。一对多,多对多的关系本身就应设计分组统计。

 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
740
import
I
顶部