2010-07-14 5 views
2

마스터 테이블과 세부 테이블이 있습니다. 삭제 캐스케이드가 이 아니고이 지정되었습니다.단일 쿼리에서 자식 테이블과 부모 테이블의 레코드를 삭제하는 방법은 무엇입니까?

단일 쿼리에서 마스터 레코드뿐만 아니라 자식 레코드도 삭제하고 싶습니다.

단일 쿼리를 사용하여 EmpID = 20 인 EmployeeDetails 및 Employee 레코드를 삭제하려고한다고 가정합니다.

가능합니까?

도와주세요.

+1

왜 계단식 삭제를 설정하지 않습니까? 이것이 바로 그것의 목적입니다. – Fosco

+1

캐스케이드 삭제 트리거를 부모에서 자식으로 활성화하는 것이 좋습니다. 왜 당신이 그것을 사용할 수없는 몇 가지 구체적인 이유가 있습니까? 규칙을 활성화하면 Employee 레코드 # 20을 삭제하면 캐스케이드 규칙이 적용된 EmployeeDetails의 행도 삭제됩니다 ... –

+0

MySQL ('DELETE parenttable, childtable FROM parenttable JOIN childtable ...')에서 수행 할 수 있지만 내가 아는 한 ANSI SQL이나 T-SQL이 아닙니다. 유용하지만 캐스케이드가 적합하지 않은 경우 (부모가 아닌/자식을 기반으로하는 경우)가 있습니다. 물론 거래가 항상 있습니다. – bobince

답변

3

당신이 cascade delete가 켜져하지 않는 한 단일 쿼리에서 그것을 할 수 없거나 그 관계에 대한 FK 테이블 행 삭제됩니다 PK 테이블에 trigger

당신은 자식 테이블에 트리거를 추가 할 수
2

단일 명령으로 두 테이블에서 삭제할 수있는 구문은 SQL에 없습니다. 하나의 "일괄 처리"또는 트랜잭션 (이렇게하는 것이 바람직 함)에서이를 수행 할 수 있습니다.

1

다른 자식을 삭제 한 다음 부모를 삭제합니다. 이것은 기술적으로 단일 명령문이 아니지만 애플리케이션에서 단일 DELETE 만 실행하면됩니다.

관련 문제