1

我想根据另一个表字段更新一个字段。表格是这样的:

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 中,VVID 是根据 STID、VID 和 WEIGHT 三个字段生成的。但在表 A 中,我没有 WEIGHT 字段。因此,如果我使用下面的代码,我会收到“单行查询返回多行”错误。

UPDATE  A
SET VVID = (SELECT distinct VVID
          FROM  B
          WHERE B.STID = A.STID and B.VID = A.VID  ) 

请给我建议。

谢谢萨蒂什

4

3 回答 3

2

在这里,您的内部查询返回多行,因为缺少用于比较权重的附加条件,因此例如 STID = s10 和 VID = v5,内部查询将返回 VVID = v1 和 VVID = v2 的两行。update 子句在 SET 之后需要一个值。

如果您的应用程序可以接受,您可以修改查询以更新 VVID 的最大值或最小值

UPDATE A SET VVID = (SELECT MIN(VVID) FROM B WHERE B.STID = A.STID and B.VID = A.VID)

或者

UPDATE A SET VVID = (SELECT MAX(VVID) FROM B WHERE B.STID = A.STID and B.VID = A.VID)

于 2014-03-20T20:58:15.303 回答
1

我认为您可以使用INNER JOIN查询进行更新

UPDATE A 
JOIN B
ON  B.STID = A.STID 
AND B.VID = A.VID 
SET A.VVID = B.VVID
于 2014-03-20T20:25:22.817 回答
0

请使用具有常量值的联合而不是连接。详情请参考帖子 http://scn.sap.com/docs/DOC-40619

于 2014-03-24T17:49:31.200 回答