从另一个表更新表

时间:2014-03-20 20:22:34

标签: sql hana

我想根据另一个表字段更新字段。表格如下:

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所在

3 个答案:

答案 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