2012-02-18 5 views
3

taxon_id, scientific_name_element_idparent_id의 세 열이있는 테이블이 있습니다. 나는 구조 요소의 끝이 아닌 부모 요소가 아닌 요소 인 요소를 찾고자합니다.MySQL "NOT IN"쿼리가 작동하지 않습니다.

나는, 내가 실제로 항목을 검색하고, 예를 들어, taxon_id=1이 있음을 볼 수있을 때 나는 빈 집합을 얻을, 나는

select taxon_id 
     from taxon_name_element 
     where taxon_id not in 
          (select parent_id from taxon_name_element) 

사용하지만이 작동하지 않는 것을 제안 어떤 소스를 발견 더 parent_id=1

는 반대로 나는 비어 있지 않은 결과가 내가 잘못 뭐하는 거지

을 설정할 수 taxon_id 년대 PARENT_ID 년대에 무엇을 볼 때? 이 문제를 어떻게 해결할 수 있습니까? PARENT_ID 열을 가정

+1

가능한 중복 http://stackoverflow.com/questions/129077/sql-not-in -constraint-and-null-values) – ruakh

+0

ruakh에게 감사드립니다. null이 아니며 필요하지 않습니다. 나는 이것을 올바르게 이해하고 있는가? : taxon_id가 NULL과 비교된다면, 알려지지 않은 값을 반환하고 알 수없는 값을 더하면 알려지지 않은 값을 얻는다. linkk을 보내 주셔서 감사합니다. – SimaPro

+1

예. '3 <> NULL'과 같은 것은 'NULL'이 3 일 수 있기 때문에 불확정합니다. 역시'3 NOT IN (1, 2, NULL)'이다. MySQL은'WHERE' 절을 만족시키는 것으로 알려진 행만 리턴한다. – ruakh

답변

6

taxon_name_element.parent_id에 NULL이 있습니까?

쿼리 ...

select taxon_id 
from taxon_name_element 
where taxon_id not in (
    select parent_id 
    from taxon_name_element 
) 

는 ... parent_id_Xparent_id 열에 현재 실제 값들이다

select taxon_id 
from taxon_name_element 
where 
    taxon_id <> parent_id_1 
    AND taxon_id <> parent_id_2 
    ... 
    AND taxon_id <> parent_id_N 

... 동일하다. 둘 중 하나라도 NULL이면 해당하는 taxon_id <> parent_id_X 표현식이 WHERE 표현식 전체를 끌어서 NULL로 "축소"합니다.

필터 아웃 NULL을 당신이 원하는 것을 얻을 수 있습니다 :

select taxon_id 
from taxon_name_element 
where taxon_id not in (
    select parent_id 
    from taxon_name_element 
    where parent_id is not null 
) 
([제약 조건과 NULL 값을 SQL]의
2

(값을 의미가없는 설정) NULL

모든

(의미 PARENT_ID이 NULL) PARENT_ID에 대한 값이없는을 scientific_name_element_id 선택하는 것입니다 당신은 이것을한다 :

SELECT scientific_name_element_id 
FROM YOUR_TABLE 
WHERE parent_id IS NULL 

그러면 부모가없는 scientific_name_element_id의 목록이 표시됩니다.

+0

나는 당신이 그 질문을 잘못 이해 했음에 틀림 없다고 생각합니다. * 부모가없는 레코드를 쿼리에서 찾을 수 있습니다. OP는 * 아이들이없는 레코드를 찾고 싶어합니다 *. (단, 테이블의 이름은'taxon_name_element'입니다.) – ruakh