MySQL“NOT IN”查询不起作用

时间:2012-02-18 18:14:49

标签: php mysql database subtraction

我有一个包含三列的表:taxon_idscientific_name_element_idparent_id。我想找到孩子而不是父母的元素,所以结构的终点。

我发现一些消息来源暗示我使用

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

但是这不起作用,当我可以实际浏览条目并看到有例如taxon_id=1和NO parent_id=1

时,我得到一个空集

相反,当我看到parent_id中的taxon_id是什么时,我得到一个非空的结果集

我做错了什么?我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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
)

......等同于......

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

...其中parent_id_X是当前位于parent_id列中的实际值。如果其中一个是NULL,相应的taxon_id <> parent_id_X表达式将“折叠”为NULL,用它拖动整个WHERE表达式。

过滤掉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
)

答案 1 :(得分:2)

假设 parent_id 列为 NULL (表示未设置任何值)

选择 parent_id 没有值的所有 scientific_name_element_id (表示parent_id为NULL)

你这样做:

SELECT scientific_name_element_id
FROM YOUR_TABLE
WHERE parent_id IS NULL

这将为您提供一个没有父母的scientific_name_element_id列表。