我有一个包含三列的表:taxon_id,scientific_name_element_id和parent_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是什么时,我得到一个非空的结果集
我究竟做错了什么?我怎样才能解决这个问题?
解决方法:
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
)