У меня есть простая иерархия категорий в базе данных SQLite3, каждая строка хранит родительский идентификатор или NULL
в зависимости от ситуации.
Я хотел бы выяснить, является ли конкретная категория листом, по сути, определив для каждой строки, определен ли для нее родительский идентификатор. Или, скорее, определение количества дочерних строк для каждой строки.
Определение таблицы:
CREATE TABLE category (
id INTEGER PRIMARY KEY AUTOINCREMENT
name TEXT NOT NULL
parent_id INTEGER DEFAULT NULL
);
Пример данных:
id name parent_id
---------- ---------- ----------
34 People
35 Countries
36 USA 35
37 Pop 36
38 Rock 36
39 Japan 35
40 Pop 39
42 Rock 39
43 J-Pop 40
Желаемый выход:
Исходные данные плюс подсчет количества подкатегорий (дочерних) в каждой строке.
id name parent_id direct_children
---------- ---------- ---------- ---------------
34 People 0
35 Countries 2
36 USA 35 2
37 Pop 36 0
38 Rock 36 0
39 Japan 35 2
40 Pop 39 1
42 Rock 39 0
43 J-Pop 40 0
Это кажется потенциально простым (?), Но, поскольку я, как правило, теряюсь за пределами простых СОЕДИНЕНИЙ, я до сих пор не слишком далеко продвинулся в этом. Я проверил похожие вопросы, но они, кажется, объединяются между таблицами или хотят сделать более сложный подсчет всех дочерних элементов в иерархии, а не только прямых дочерних строк.
Возможно изменение схемы таблицы (например, если child_id или child_count), но я бы не хотел.
Любой вклад был бы наиболее ценным.