CTE 및 INNER JOIN을 사용하여 테이블에서 데이터를 삭제하려면 어떻게해야합니까? 오라클에서CTE 및 INNER JOIN을 사용하여 행을 삭제하는 방법은 무엇입니까?
with my_cte as (
select distinct var1, var2
from table_a
)
delete
from table_b b inner join my_cte
on var1 = b.datecol and var2 = b.mycol;
CTE 및 INNER JOIN을 사용하여 테이블에서 데이터를 삭제하려면 어떻게해야합니까? 오라클에서CTE 및 INNER JOIN을 사용하여 행을 삭제하는 방법은 무엇입니까?
with my_cte as (
select distinct var1, var2
from table_a
)
delete
from table_b b inner join my_cte
on var1 = b.datecol and var2 = b.mycol;
열팽창 계수 나 INNER JOIN
도가 DELETE
명령에 사용할 수 있습니다이 유효한 구문은 그렇게해야이 작업입니다. INSERT
및 UPDATE
명령에도 동일하게 적용됩니다.
일반적으로 가장 좋은 대안은 DELETE ... WHERE ... IN
을 사용하는 것입니다
DELETE FROM table_b
WHERE (datecol, mycol) IN (
SELECT DISTINCT var1, var2 FROM table_a)
또한 하위 쿼리의 결과에서 삭제할 수 있습니다. 이것은 docs에서 다루고 있습니다 (가볍지 만). 방법은 아래
시도 : -
는 my_cte에서 곳 a.var1 = B 1을 선택 ) table_a 에서 을 VAR2 ( 구별이 var1을 선택 존재 table_b의 B (같은 my_cte와 에서 삭제합니다. datecol과 a.var2 = b.mycol;
서브 쿼리의 'distinct'는 필요하지 않습니다. (이는'IN' 연산자와 함축되어 있습니다) –
감사합니다 - 나는 결코 그것을 알지 못했습니다. 하위 쿼리 결과를 제한하여 확인했지만 실행 계획을 실제로 확인하지 않았습니다. 오늘 밤. 'DISTINCT'가 쿼리에 해를 끼치나요? –
오라클이 단순히 하위 쿼리에서 'distinct'를 제거했다면 놀라지 않을 것입니다. 따라서 성능 측면에서 중요하지 않습니다. –