2017-05-13 29 views
0

DB2テーブルを更新する際に助けてください。この巨大なテーブルを更新するにはより良い方法がありますか? Adv thxs。DB2テーブルを更新できません

UPDATE RT.ITEM IM SET 
IM.ITEMNAME = GT.ITEM_D, IM.ITEMSIZE = GT.SIZE, IM.COLOR = GT.COL, 
IM.ITEMINFO = GT.ITEM_I WHERE IM.RET = 14 AND IM.LAN = 10 and 
    IM.ITEMK IN (SELECT GT.SN_N FROM GD.G_TEMP GT); 

別のスキーマテーブル(GD.G_TEMP)からテーブル(RT.ITEM)を更新しようとするとエラーMSGの下得る: [コード:-206、SQL状態:42703] DB2のSQLエラー:SQLCODE = -206、SQLSTATE = 42703、SQLERRMC = GT.ITEM_D

答えて

0

コードは機能しません。 DB2は明示的なJOINUPDATEにサポートしていません。しかし、あなたは、相関サブクエリとやりたいことができます。

UPDATE RT.ITEM IM 
    SET (ITEMNAME, ITEMSIZE, COLOR, ITEMINFO) = 
     (SELECT GT.ITEM_D, GT.SIZE, GT.COL, GT.ITEM_I 
      FROM GD.G_TEMP GT 
      WHERE GT.SN_N = IM.ITEMK 
      FETCH FIRST 1 ROW ONLY 
     ) 
    WHERE IM.RET = 14 AND IM.LAN = 10 AND 
      EXISTS (SELECT 1 
        FROM GD.G_TEMP GT 
        WHERE GT.SN_N = IM.ITEMK 
       ); 
+0

返信いただきありがとうございますが、実行中に別のエラーが表示されます。ここで助けてくれますか? [コード:-811、SQLの状態:21000] DB2 SQLエラー:SQLCODE = -811、SQLSTATE = 21000、SQLERRMC = null。 – user2522503

+0

サブクエリが複数の行を返すために発生します。 'fetch first 1 row only'を使ってエラーを修正することができますが、それは単に回避策かもしれません。返信用の –

0

こんにちはあなたは明確な、単一のsn_n値に対して複数の行でgd_tempテーブルにあなたの問題を解決しないならば、あなたがする必要がありますが、mergeコマンドを試すことができますサブクエリにフィルタを追加してください。

MERGE INTO RT.ITEM IM 
USING 
    (SELECT DISTINCT 
    GT.ITEM_D, 
    GT.SIZE, 
    GT.COL, 
    GT.ITEM_I 
    FROM GD.G_TEMP gt 

) gt on gt.sn_n=im.itemk AND IM.RET = 14 AND IM.LAN = 10 
WHEN MATCHED THEN UPDATE 
SET (im.ITEMNAME, im.ITEMSIZE, im.COLOR, im.ITEMINFO) = (GT.ITEM_D, GT.SIZE, GT.COL, GT.ITEM_I) 
+0

Thxです。エラーmsgの下で実行中です。手伝って頂けますか。エラーメッセージ:DB2 SQLエラー:SQLCODE = -134、SQLSTATE = 42907、SQLERRMC = ITEM_I – user2522503

+0

これらの2つのテーブルのddlにサンプルデータを入力してください。このエラーは、「CLOB、DBCLOB、BLOB、LONG VARCHAR、またはLONG​​ VARGRAPHICデータ型の結果となる式は、SELECT DISTINCT文、group by ....」で許可されていません。あなたは、1行につき1つの行だけを持つために追加のフィルタを追加する必要があります。gt.sn_n – zlidime

+0

理由を説明するのを忘れました。 select distinctまたはgroup byを使用せずにgt.sn_nごとに1つの行しか持たないようにフィルタを追加する必要があります – zlidime

関連する問題