SQL NOT IN нуждается в двойных слоях? - PullRequest
0 голосов
/ 23 сентября 2011

Я пишу код для попадания в древовидную структуру, которая сохраняется в базе данных MySQL, каждый узел хранит идентификатор своего родителя или NULL, если это корень дерева. В ходе запроса к нему, чтобы попытаться получить все конечные узлы, я заметил кое-что странное.

А именно, этот запрос не дает результатов:

SELECT * 
FROM tree_table 
WHERE node_id NOT IN(SELECT parent_node_id FROM tree_table)

в то время как этот дает результаты, я после:

SELECT * 
FROM tree_table
WHERE node_id NOT IN(
    SELECT node_id 
    FROM tree_table 
    WHERE node_id IN(SELECT parent_node_id FROM tree_table))

Кажется, это НЕ доставляет мне неприятности. Это что-то вроде порядка операций или чего-то подобного, что я неправильно помню?

1 Ответ

4 голосов
/ 23 сентября 2011

Если

SELECT parent_node_id FROM tree_table

возвращает один NULL из набора результатов, то остальная часть запроса

SELECT *   
FROM tree_table   
WHERE node_id NOT IN(SELECT parent_node_id FROM tree_table)  

не даст результатов.

См. Предложение NOT IN и значения NULL (один из множества связанных вопросов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...