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 の 3 つのフィールドに基づいて生成されます。しかし、テーブル 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 の 2 つの行を返します。update 句では、SET の後に単一の値が必要です。

アプリケーションで許容できる場合は、クエリを変更して VVID の最大値または最小値を更新できます。

UPDATE A SET VVID = (SELECT MIN(VVID) FROM B WHERE B.STID = A.STID および B.VID = A.VID)

また

UPDATE A SET VVID = (SELECT MAX(VVID) FROM B WHERE B.STID = A.STID および B.VID = A.VID)

于 2014-03-20T20:58:15.303 に答える
0

結合ではなく、定数値を持つユニオンを使用してください。詳細については、投稿 http://scn.sap.com/docs/DOC-40619を参照してください。

于 2014-03-24T17:49:31.200 に答える