2010-02-12 2 views
0

테이블에 특정 유형의 데이터가 포함되어 있지 않으면 테이블에서 선택할 수있는 방법이 필요합니다.SQL 서버 - 존재하지 않는 데이터 선택

예를 들어 farm이라는 테이블과 animal이라는 테이블이있는 경우 이제 FarmA에는 돼지와 염소가 포함되어 있고 FarmB에는 염소가 들어 있습니다. 돼지가없는 모든 농장을 선택하고 싶습니다.

내 첫 번째 시도는이 수행했다 :
SELECT f.* FROM farm f INNER JOIN animal a ON f.Id = a.FarmId WHERE a.Name <> 'pig';
을하지만 염소를 ​​포함하지만 난 그게 돼지가있는 농장을 다시 반환 싶지 않기 때문에 이것은 여전히 ​​FARMA 날 다시 반환합니다.

일부 서브 쿼리를 시도하고 not exists을 사용했지만 작동하지 않습니다. 나는 이것이 내 쿼리를 올바르게 구조화 할 수 없다고 확신한다.

+0

가 http://www.codinghorror.com/blog/archives/에서보세요 : 나는 오라클과 더 잘 알고하지만 난 확인하고는 "NOT EXISTS"구문은 같은 것 같다 조인의 다른 유형에 대한 간단한 시각적 설명은 000976.html을 참조하십시오. – adrianbanks

+0

링크를 주셔서 감사합니다/지금은 완전한 감각을 만드는 쿼리를 참조하십시오/내가 그것을 주셔서 감사합니다 –

답변

5
select f.* 
from Farm f 
left outer join (
    select FarmID 
    from Animal 
    where Name = 'pig'  
) a on f.ID = a.FarmID 
where a.ID is null 
+0

나는 여러 열이 필요합니다. 시도 할 때마다 나는해야하는 것보다 기하 급수적으로 많은 기록을 얻습니다. 내가 속하지 않는 기록이 없다는 것은 절대적으로 중요합니다. 어떤 아이디어? 같은 스키마를 가진 다른 테이블에 존재하지 않는 행이 필요합니다. 그들은 테이블 앞과 뒤입니다. – Chiramisu

0

이 방법이 유용합니까?

SELECT f.* FROM FARM f WHERE NOT EXISTS 
    (SELECT * FROM animal a WHERE a.FarmId = f.FarmId and a.Name = 'pig') 
관련 문제