0

ORDERSとORDER_TEMPの2つのテーブルがあり、どちらも構造が同じです。ORDER_IDは、両方のテーブルの主キーです。

ここで、ORDER_TEMPテーブルの値からORDERテーブルのKEY_ID列を更新する必要があります。

両方のテーブルに100万を超えるレコードがあります。

UPDATE ORDER  
SET KEY_ID = ( SELECT KEY_ID FROM ORDER_TEMP WHERE  ORDER_TEMP.ORDER_ID = ORDER.ORDER_ID and ORDER_TEMP.PNP_GROUP=99) 

where句をORDERテーブルに入れて、1つの注文に対して実行すると、機能しましたが、テーブル全体に対して実行すると、永久に実行され、機能しませんでした。

助けてください

4

1 に答える 1

1

あなたの意図が、ORDERテーブルに一致があり、ORDER_TEMPテーブルKEY_IDが異なるテーブル内の行のみを更新することであると仮定し、それが無効なテーブル名であるという事実を無視して、ORDER20 未満の行のみを更新することから始めます。変更する予定のテーブル内の行の割合

UPDATE ORDER  
   SET KEY_ID = ( SELECT KEY_ID 
                    FROM ORDER_TEMP 
                   WHERE ORDER_TEMP.ORDER_ID = ORDER.ORDER_ID 
                     and ORDER_TEMP.PNP_GROUP=99) 
 WHERE EXISTS( SELECT 1
                 FROM order_temp
                WHERE ORDER_TEMP.ORDER_ID = ORDER.ORDER_ID 
                  and ORDER_TEMP.PNP_GROUP=99
                  and order_temp.key_id != order.key_id) 

KEY_IDいずれかのテーブルに入れることができる場合は、句NULLで不等式の比較を調整する必要があります。EXISTS

それでも問題が解決しない場合は、現在のクエリ プランと利用可能なインデックスから始まる詳細情報が必要になります。

于 2012-08-15T00:31:32.277 に答える