SQL: как ВЫБРАТЬ по значению, если значение может быть нулевым - PullRequest
0 голосов
/ 03 июня 2018

У меня есть таблица базы данных «Категория», которая может иметь собственную ссылку.Если self-ссылка равна нулю, то это категория верхнего уровня (без родителя).Если он указывает на другую категорию, это подкатегория данной категории.

Теперь я пытаюсь настроить запрос, который возвращает все подкатегории с указанным идентификатором родительской категории.Примерно так (синтаксис Android Room):

"SELECT * FROM category WHERE parent_id = :parentId"

Этот запрос ничего не возвращает, если parentId == null, но я бы хотел, чтобы он возвращал все категории, где parentId == null (т.е. категории верхнего уровня).С запросом

"SELECT * FROM category WHERE parent_id IS NULL"

я могу получить родительские категории успешно, но, очевидно, это не работает для подкатегорий.

Я пробовал также следующий запрос

"SELECT * FROM category WHERE (parent_id IS NULL OR parent_id = :parentId)

, ноКонечно, это не удается, поскольку он всегда возвращает категории верхнего уровня, хотя намерение состоит в том, чтобы получить только определенный набор подкатегорий.

Мой вопрос заключается в том, как настроить запрос так, чтобы он работал так, как ожидалось., т.е. возвращает все категории верхнего уровня, когда parentId == null, в противном случае он возвращает все подкатегории данного идентификатора категории.

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Стандарт SQL требует такой обработки значений NULL.

Но SQLite имеет расширение: вы можете использовать IS также со значениями, отличными от NULL:

SELECT * FROM category WHERE parent_id IS :parentId
0 голосов
/ 03 июня 2018

Я думаю, вам просто нужно немного более сложное условие:

SELECT c.*
FROM category c
WHERE (c.parent_id IS NULL AND :parentId IS NULL) OR
      (parent_id = :parentId);
...