2

locationsitems、の 3 つのテーブルを持つ DB2 データベースがあります movement_history。テーブルにはへのitems外部キー があります。このテーブルには、外部キー 、into 、および 2 つの外部キーand 、 into があります。location_idlocationsmovement_historyitem_iditemslocation_id_beforelocation_id_afterlocations

location行がない場合、itemsまたはそれを参照していない場合は、削除したいと思いmovement_historyます。locationどこかで参照されている場合は、更新して削除済みとしてマークしたいだけです。これを1つのステートメントで行う方法はありますか?これを行う最善の方法は何ですか?

4

1 に答える 1

1

次のようなコマンドを試してください。

MERGE INTO LOCATIONS AS LOC
USING (
  SELECT Q1.ID, COALESCE(Q4.LOCATION_AFTER, Q3.LOCATION_BEFORE, Q2.LOCATION) AS ANY_REF
  FROM LOCATIONS Q1
    LEFT OUTER JOIN ITEMS Q2 ON Q2.LOCATION = Q1.ID
    LEFT OUTER JOIN MOVEMENT_HISTORY Q3 ON Q3.LOCATION_BEFORE = Q1.ID
    LEFT OUTER JOIN MOVEMENT_HISTORY Q4 ON Q4.LOCATION_AFTER = Q1.ID) AS T1
    ON LOC.ID = T1.ID
WHEN MATCHED AND T1.ANY_REF IS NOT NULL THEN
  UPDATE SET ACTUAL = 'N'
WHEN MATCHED AND T1.ANY_REF IS NULL THEN
  DELETE
于 2012-05-19T21:14:41.083 に答える