我想根据另一个表字段更新字段。表格如下:
TABLE A
SID SMONTH STID VID VVID
1 201312 s10 v5 ?
2 201312 s10 v5 ?
1 201312 s11 v7 ?
2 201401 s11 v7 ?
1 201312 s1 v9 ?
2 201401 s1 v9 ?
1 201312 s1 v60 ?
1 201312 s1 v71 ?
在上表A中,我需要使用下表B中的VVID更新VVID列。
TABLE B
VVID STID VID WEIGHT
v1 s10 v5 0.5
v2 s10 v5 7.5
v1 s11 v7 1.5
v2 s11 v7 6.5
v1 s1 v9 5
v2 s1 v9 5
v1 s1 v60 5
v1 s1 v71 5
在上表B中,基于三个字段STID,VID和WEIGHT生成VVID。但在表A中,我没有WEIGHT字段。所以,如果我使用下面的代码我得到"单行查询返回多行"错误。
UPDATE A
SET VVID = (SELECT distinct VVID
FROM B
WHERE B.STID = A.STID and B.VID = A.VID )
请给我建议。
由于 Sathish所在
答案 0 :(得分:2)
此处您的内部查询返回多行,因为缺少比较权重的附加条件,例如STID = s10和VID = v5,内部查询将返回两行,其中VVID = v1且VVID = v2。 update子句在SET之后需要一个值。
如果您的应用程序可接受
,您可以修改查询以更新VVID的最大值或最小值更新A. SET VVID =(选择最小值(VVID) 来自B. 在哪里B.STID = A.STID和B.VID = A.VID)
或
更新A. SET VVID =(SELECT MAX(VVID) 来自B. 在哪里B.STID = A.STID和B.VID = A.VID)
答案 1 :(得分:1)
我认为您可以使用INNER JOIN
查询进行更新
UPDATE A
JOIN B
ON B.STID = A.STID
AND B.VID = A.VID
SET A.VVID = B.VVID
答案 2 :(得分:0)
请使用具有常数值的联合而不是联接。有关详细信息,请参阅帖子 http://scn.sap.com/docs/DOC-40619