如何用SQL实现类似于矩阵的按位置相乘功能
表A,表B结构类似,
假设表A的结构为:
ID x1 x2 x3
表B的结构为:
ID y1 y2 y3
其中ID值都是唯一的
问:
如何用SQL语句实现 A = A * B
即对于ID值相同的表A、B的记录,更新表A的方法如下:
A.x1 = A.x1 * B.y1
A.x2 = A.x2 * B.y2
A.x3 = A.x3 * B.y3
问题点数:200、回复次数:7Top
1 楼newly_ignorant(不学无术)回复于 2002-07-17 09:51:10 得分 10
假设Xn、Yn都是数值
update A
set A.x1 = A.x1 * B.y1
,A.x2 = A.x2 * B.y2
,A.x3 = A.x3 * B.y3
from A,B
where A.ID = B.ID
Top
2 楼wlz47(秋水沉舟)回复于 2002-07-17 16:59:35 得分 0
这个好像不行,我用的这个软件的自带数据库SQL语言不支持update form两个表
请问还有别的方法没有Top
3 楼erickleung()回复于 2002-07-17 20:43:06 得分 40
update A
set A.x1 = A.x1 * (select B.y1 from B where A.ID = B.ID)
,A.x2 = A.x2 * (select B.y2 from B where A.ID = B.ID)
,A.x3 = A.x3 * (select B.y3 from B where A.ID = B.ID)
Top
4 楼CSDNM(决定不当CSDN经理了)回复于 2002-07-17 21:56:36 得分 60
不知道你的数据库类型,但erickleung() 的方法应该可以,但速度可能不快,以下语句如果可以,那速度应该快一些:
update A inner join b on a.id=b.id
set A.x1 = A.x1 * B.y1
,A.x2 = A.x2 * B.y2
,A.x3 = A.x3 * B.y3
Top
5 楼KingSunSha(弱水三千)回复于 2002-07-17 22:23:02 得分 70
在oracle这样不支持update语句中带两个表名的数据库中,如下的方法更通用一点:
update A
set (x1,x2,x3) = (select A.x1*B.y1, A.x2*B.y2, A.x3*B.y3
from B
where ID = A.ID);
Top
6 楼mmzxg(超级笨蛋)回复于 2002-07-18 08:40:11 得分 20
update A
set (x1,x2,x3) = (select A.x1*B.y1, A.x2*B.y2, A.x3*B.y3
from B
where ID = A.ID);
Top




