2012-05-09 1 views
2

나는 세 개의 테이블이있는 DB2 데이터베이스가없는 경우. itemslocations에 외래 키, location_id을 가지고 있습니다. movement_historyitems에 외래 키, item_id을 가지고 있으며, 두 개의 외래 키, locationslocation_id_beforelocation_id_after.삭제 행에는 외국 참조, 또는 업데이트 그렇지 않으면

items 또는 movement_history에 행이없는 경우 location을 삭제하고 싶습니다. location 어딘가에 참조하면, 난 그냥 삭제로는 표시로 업데이트합니다. 한 가지 진술로이를 수행 할 수있는 방법이 있습니까? 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 이 같은

+1

SQL 문은 한 번에 하나 일을 할 수 있습니다. 당신이하고 싶은 것은 한 문장 내에서 UPDATE와 DELETE입니다. 나는 그것이 그렇게 생각하지 않습니다. – NealB

+0

나는 INTO ... MATCHED 언제 다음 업데이트 ... THEN MATCHED INSERT하지 않을 경우 ...'쿼리 DB2의'병합 유사 뭔가를 기대하고, 대신 갱신/삽입의 삭제/업데이트. 한 –

+0

... 실제로, 나는 MERGE INTO 구문을 delete/update와 함께 사용할 수 있을지 궁금하다. 나는 그것을 들여다 볼 것이다. –

답변

1

시도 명령 : SELECT, UPDATE, INSERT 또는 DELETE :

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