2013-07-04 6 views
1

업데이트 부모 테이블 상태

------------- 
PID | CID |Pstatus 
1 | 1 | Deleted 
2 | 1 | Active 
3 | 2 | Deleted 
4 | 2 | Deleted 

논리 뒤에

다음과 같다 부모님의 상태가

부모 테이블을 "삭제"할 때 내가 무엇을 시도하려는 것은 내 자식 테이블을 업데이트하는 것입니다

IF CID = 1 and PsTatus = deleted Update ChildTableStatus Set Status = 'Deleted' Where CID = 1 Else cannot update childtablestatus to deleted due to there are active records 

여기에서 반복 검사를 수행하는 방법은 무엇입니까?

+1

'ChildTableStatus'에 대한 스키마를 표시하고 테이블 간의 관계를 설명하십시오. – HABO

답변

2

"ChildTableStatus"가 실제로 동일한 테이블을 참조한다고 가정합니다. 당신은이 경우 적절한 필터링 표현을 찾고 있습니다 :

update parents 
    set status = 'deleted' 
    where exists (select 1 from parents p2 where p2.cid = p.pid and p2.status = 'deleted') 
0

이 시도이 ..

Update ChildTableStatus 
Set Status = 'Deleted' 
Where CID = (Select CID from Parents where Pstatus = 'deleted') 
1

을 나는 다음과 같은 DML이 존재 같은 중첩 된 쿼리를 사용하는 것보다 또는 더 있어야한다고 생각합니다 성능 저하로 이어집니다.

Update p1 
Set p1.Status = 'Deleted' 
FROM Parents p1 JOIN Parents p2 
ON p1.pid = p2.cid 
Where p2.status = 'Deleted' 
  • 은 같은 테이블에 업데이트를 수행하려고하는 가정입니다. 그렇지 않으면 FROM 절에서 테이블 이름을 변경하십시오.