2012-11-29 2 views
0

멤버 데이터가 포함 된 두 개의 테이블 ('members'및 'member_data')이 있습니다. 어떤 이유로 (내가 이것을 상속했습니다) member_data 테이블 members 테이블보다 많은 레코드가 있습니다. 두 테이블 모두 member_id 열이 있는데 두 테이블 사이의 사용자 정보가 일치하는 것으로 보입니다.다른 테이블에 존재 여부에 따라 한 테이블에서 레코드 제거

'members'테이블에 일치하는 member_id이 없으면 'member_data'테이블에서 레코드를 삭제하고 싶습니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

답변

1

당신은 NOT IN 문을 사용하여 시도 할 수 있습니다 :

DELETE FROM `member_data` 
WHERE `member_data`.`member_id` 
NOT IN (
    SELECT `members`.`member_id` 
    FROM `members` 
); 

어쨌든, 당신은 예기치 않은 행을 삭제하지 삽입하거나 버그를 수정해야합니다.

+0

챔피언처럼 일했습니다. 감사합니다. 그리고 예, 버그 삭제는 죽을 때까지 죽을 필요가 없습니다. :) – 86Stang

+0

데이터베이스를 이런 식으로 관리 할 때'NOT IN'문을 사용할 수는 있지만,'IN'과'NOT IN'은 많은 자원을 사용하므로 응용 프로그램 내에서 피해야합니다. 다행이라면 도움이 될 수 있습니다. :-) –

0
delete from member_data where member_id not in (select member_id from members); 

이 쿼리는 구성원 테이블에없는 member_data 테이블에서 모든 레코드를 삭제합니다.

관련 문제