SQL Server一对多多表关联Update问题
诸位,我在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是非常不负责任的。
问题点数:20、回复次数:11Top
1 楼ferrytang(欢迎你)回复于 2002-01-14 11:22:07 得分 5
感觉好像你的sql语句有问题哦!Top
2 楼xzg8848(山不在高)回复于 2002-01-14 11:33:47 得分 5
不先求和要什么意思? 我认为你的语句是有问题的. 用子查询可以解决.
update Tmp001 as t1 set t1.int2=t1.int2-(select sum(t2.int2) from Tmp002 as t2 where t1.int1=t2.int1)Top
3 楼9527(做人好累,下辈子我要做棵大树)回复于 2002-01-14 12:06:46 得分 0
to ferrytang(水油)
有啥问题?语句本身语法山肯定没有问题,但是执行结果有问题,或者你说的有问题是指SQL 本身对这种情况的处理具有不可知性,这也是我的问题所在
to xzg8848(老刚)
不先求和,就是不能用子查询求和。
我举的仅仅是一个非常简单的例子,实际应用中表可能会有别的字段参与运算,例如说比率,类型什莫的,难以简单的作求和运算。或者说你在子句中采用Group By求和后仍然是一对多的关系。Top
4 楼9527(做人好累,下辈子我要做棵大树)回复于 2002-01-14 12:55:45 得分 0
????Top
5 楼9527(做人好累,下辈子我要做棵大树)回复于 2002-01-14 15:41:30 得分 0
什么?Top
6 楼garbage_collector(回收站)回复于 2002-01-15 08:55:35 得分 5
没办法了,只能换人顶一下了,幸亏我没有多给分呀,教训,有一次给了150分打了水漂,CSDN上有没有高手?只是一些闲人聊天打屁
Top
7 楼1898xxy(就此算了吧)回复于 2002-01-15 11:11:43 得分 5
为什么不用子查询求和??别为难自己了,
另:你的态度很不好呀,没有谁有义务帮你解决问题的!!!
Top
8 楼1898xxy(就此算了吧)回复于 2002-01-15 11:16:14 得分 0
另;我是一只菜鸟:]Top
9 楼9527(做人好累,下辈子我要做棵大树)回复于 2002-01-15 11:40:10 得分 0
To 1898xxy(我是怎样长大的)
不论态度如何,总归是事实。不仅仅是CSDN,互联网上到处都是聊天罐水,没几个干正经事的,很悲哀呀,我一般尽量不在CSDN上问问题,这次也就是想和大家讨论一下,仅此而已,结果大家都不感兴趣,伤心。CSDN上有没有高手,仔细看一下大家讨论的问题就知道了,我想这和编程工具的集成度增高,做程序员的门槛降低有关,当然我自己的水平也不高,否则也不会问这种比较显而易见不可行的问题。但是我对国内软件业整体水平表示担忧,高手,谁是高手,并不是因为自己不是,别人就都是,对吧。谢谢你的参与,可能我对大家的期望太高了,呵呵。Top
10 楼9527(做人好累,下辈子我要做棵大树)回复于 2002-01-15 11:44:01 得分 0
算了,我放弃了,顶的自己都累了,希望大家学业有成,再见Top
11 楼1898xxy(就此算了吧)回复于 2002-01-15 11:47:58 得分 0
呵,看来你真是"忧国忧民"呀:]
你又不是国家主席,没有必要想那么多吧??
有兴趣请帮忙看看http://www.csdn.net/Expert/topic/477/477534.shtmTop




