Запрос MySQL «НЕ В» не работает

У меня есть таблица с тремя столбцами: taxon_id , parent_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

И наоборот, когда я вижу, что такое taxon_id в parent_id, я получаю непустой набор результатов

Что я делаю не так? Как я могу это исправить?

Есть ли NULL в taxon_name_element.parent_id ?

Запрос …

 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 ) 

Предполагая, что столбец parent_id равен NULL (это означает, что значение не задано)

Чтобы выбрать все science_name_element_id , которые не имеют значения для parent_id (значение parent_id равно NULL)

Ты делаешь это:

 SELECT scientific_name_element_id FROM YOUR_TABLE WHERE parent_id IS NULL 

Это даст вам список science_name_element_id, у которого нет родителей.