Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Ваш запрос не работал, потому что подзапрос включает NULL
. Следующая небольшая модификация работает на меня:
SELECT * FROM `mytree` WHERE `id` NOT IN (
SELECT DISTINCT `parentid` FROM `mytree` WHERE `parentid` IS NOT NULL)
SELECT * FROM mytree AS t1
LEFT JOIN mytree AS t2 ON t1.id=t2.parentid
WHERE t2.parentid IS NULL
Никакая подсказка, почему Ваш запрос не работал. Вот идентичная вещь в левом синтаксисе внешнего объединения - пробуют его этот путь?
select a.*
from mytree a left outer join
mytree b on a.id = b.parentid
where b.parentid is null
Выберите * из mytree, где идентификатор не в (Выбирают отличный порожденный из mytree, где порождено, не является пустым)
http://archives.postgresql.org/pgsql-sql/2005-10/msg00228.php