У меня есть таблица с тремя столбцами: 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, у которого нет родителей.