2010-05-10 6 views
2
내가 T2 내부 행을 삭제하고 싶습니다 단계에서 2 개 MySQL의 테이블 (T1, T2에 '미러링'할)

where 절

를 동기화하는 작은 스크립트를 작성하고

그 같은 ID의 t1에서 삭제되었습니다. 내가 할 수있는,

delete from t2 where t2.id in 
    (select t2.id left join t1 on (t1.id=t2.id) where t1.id is null) 

그러나 MySQL은 물론

을 (그런데 논리적 소리) 삭제와 선택에 같은 시간에 T2를 사용하는 저를 금지 :

나는이 쿼리를 시도 질의를 2 개의 질의로 나눕니다. 먼저 ID를 선택하고이 ID가있는 행을 삭제하십시오.

내 질문 : t1에서 더 이상 존재하지 않는 t2 행을 삭제하는 더 깨끗한 방법이 있습니까? 하나의 쿼리 만?

답변

0

이 쿼리는 두 개의 테이블을 조인 만, 따라서 당신이 한 번에 삭제할 수 있도록 새 테이블의 파트너가없는 자들을 선택 :

DELETE t2 FROM t2 
LEFT JOIN t1 
ON t2.id = t1.id 
WHERE t1.id IS NULL; 
0
delete t2.* 
from t2 
left join t1 on (t1.id=t2.id) 
where t1.id is null; 
0

당신이 사용하는 경우 t2에 대한 t1의 왼쪽 조인, t1 필드의 값은 t2에서 일치하지 않는 행에 대해서는 NULL이되므로이 값이 작동해야합니다.

DELETE FROM t2 
LEFT JOIN t1 ON t1.id = t2.id 
WHERE t1.id IS NULL;