2016-10-24 2 views
0

사용 사례가 매우 똑 바르다. 수백만 행의 주석 표를 검토 한 후 우리는 많은 고아가 아동 - 의견임을 깨닫습니다.자체 조인에서 고아 삭제

정적 분석 :

3 오류가 분석 중에 발견 된

다음 쿼리는

DELETE c.* FROM `comment` c 
where c.parentId not in (select id from `comment`) 

작동하지 않습니다 그것은 같은 것을 말한다.

예기치 않은 토큰입니다. (위치 7의 "c"근처) 예기치 않은 토큰. (위치 8의 "."근처) 예기치 않은 토큰. (위치 9에서 "*"근처)

MySQL은 말했다 : 문서

1093 - 당신은

내가 문제를 이해 FROM 절에서 업데이트 대상 테이블 'C'를 지정하지만 수 없습니다 수 없습니다 대안을 생각해보십시오. 나는 당신이 작업에 대한 left join를 사용할 필요가 SQL

+0

당신이 무엇을 하든지,이 이론을 테스트하여 더미 테이블에 대한 전역 업데이트 및 삭제 – Drew

답변

1

에 아주 나쁜 생각 :

DELETE c 
    FROM comment c LEFT JOIN 
     comment cp 
     ON c.parentId = cp.id 
    WHERE cp.id IS NULL and c.parentId is not null; 

이 주를 수행 : 나는 당신이 조심해야한다고 생각합니다. 모든 댓글에 댓글이 포함 된 부모가 있습니까?

+0

감사합니다. 나는 신중을기할 것입니다. –

+0

꽤 정확한 것 같지 않습니다. 나는 SELECT에 의한 DELETE를 대체하고 너무 많은 (잘못된) 레코드를 주었다. –

+0

@PhamHuyAnh. . . 문제는'c.parentId'가'NULL'이되어서는 안된다는 것입니다. –