2013-05-21 1 views

답변

7

열팽창 계수 나 INNER JOIN도가 DELETE 명령에 사용할 수 있습니다이 유효한 구문은 그렇게해야이 작업입니다. INSERTUPDATE 명령에도 동일하게 적용됩니다.

일반적으로 가장 좋은 대안은 DELETE ... WHERE ... IN을 사용하는 것입니다

DELETE FROM table_b 
WHERE (datecol, mycol) IN (
    SELECT DISTINCT var1, var2 FROM table_a) 

또한 하위 쿼리의 결과에서 삭제할 수 있습니다. 이것은 docs에서 다루고 있습니다 (가볍지 만). 방법은 아래

+1

서브 쿼리의 'distinct'는 필요하지 않습니다. (이는'IN' 연산자와 함축되어 있습니다) –

+0

감사합니다 - 나는 결코 그것을 알지 못했습니다. 하위 쿼리 결과를 제한하여 확인했지만 실행 계획을 실제로 확인하지 않았습니다. 오늘 밤. 'DISTINCT'가 쿼리에 해를 끼치나요? –

+0

오라클이 단순히 하위 쿼리에서 'distinct'를 제거했다면 놀라지 않을 것입니다. 따라서 성능 측면에서 중요하지 않습니다. –

0

시도 : -

는 my_cte에서 곳 a.var1 = B 1을 선택 ) table_a 에서 을 VAR2 ( 구별이 var1을 선택 존재 table_b의 B (같은 my_cte와 에서 삭제합니다. datecol과 a.var2 = b.mycol;