MySQL”;NOT IN”;查询不起作用


MySQL "NOT IN" query not working

我有一个包含三列的表: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中有什么分类单元id时,我会得到一个非空的结果集

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

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

其中CCD_ 7是当前处于CCD_ 8列中的实际值。如果其中一个表达式为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
)

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

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

你这样做:

SELECT scientific_name_element_id
FROM YOUR_TABLE
WHERE parent_id IS NULL

这将获得一个没有父级的sciention_name_element_id列表。