2011-09-15 2 views
2

클래스에 등록되지 않은 모든 사람들을 반환하는 mysql 쿼리가 작동합니다. SQL은 다음과 같습니다.NOT IN 쿼리의 결과를 삭제하는 SQL 쿼리

SELECT * FROM person 
LEFT JOIN attendance 
ON (person.id = attendance.pid) 
WHERE (attendance.pid IS NULL 
) 

이제 결과에서 모든 사람을 삭제하고 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 "SELECT *"를 "DELETE"로 바꾸려고 시도했다. 그리고 이것은 나에게 구문 오류를 주었다. 어떤 아이디어?

+1

어떤 데이터베이스 엔진이 사용하고 있습니까? –

+0

'delete'로 시도 할 때'*'를 꺼내려고했다고 생각합니까? – Beef

+0

http://stackoverflow.com/questions/5835589/sql-2-tables-how-to-delete-rows-if-id-not-referenced-in-both-tables/5835619#5835619 –

답변

5

로 변경합니다 :

DELETE FROM person WHERE id NOT IN (SELECT pid FROM attendance) 
+0

헤드 업 : 출석에 NULL pid가있는 경우이 방법이 작동하지 않는다고 생각합니다. –

+0

@Derek, 구현에 따라 다릅니다. 하위 선택 영역에 pid IS NOT NULL을 추가하여 처리 할 수 ​​있습니다. –

+0

@Robert의 경우 일부 엔진에서는 하위 선택 결과에 NULL이 표시되면 일치하는 레코드를 허용하지 않습니다. –

1

는 출석 기록없이 모든 사람을 삭제하려는 가정

DELETE person 
FROM person 
LEFT JOIN attendance 
ON (person.id = attendance.pid) 
WHERE (attendance.pid IS NULL 
) 
0

은 엔진에 따라 달라집니다. PL/SQL에서 아니면 또 다른 때문일 수 있습니다 :

DELETE FROM person where person.id not in(
    SELECT a.pid FROM attendance a 
) 

[테스트하지]

관련 문제