Как отфильтровать поддеревья с определенными унаследованными флагами из древовидной иерархии, хранящейся в столбце «путь»?

#sql #postgresql #apache-spark-sql

Вопрос:

Представьте себе древовидную иерархию, подобную этой:

 1
|_ 11
    |_ 111
        |_ 1111
        |_ 1112
    |_ 112
        |_ 1121
        |_ 1122
        |_ 1113
|_ 12
    |_ 121
    |_ 122
    |_ 123
    |_ 124
        |_ 1241
        |_ 1242
        |_ 1243
 

Если у нас есть одна таблица, в которой хранятся идентификаторы и пути:

ID путь
1 /1/
11 /1/11/
111 /1/11/111/

вместе с одной таблицей, в которой хранится флаг «is_turned_on» для некоторых идентификаторов:

ID is_turned_on
11 истинный
111 истинный
1121 ложный
121 истинный
122 ложный
1243 истинный

И мы предполагаем, что:

  1. Дети унаследуют «is_turned_on» от ближайшего родителя
  2. Случай по умолчанию (если идентификатор сам по себе не имеет явной записи в БД, ни один родитель с явной записью в БД) по умолчанию имеет значение «is_turned_on=true».

Есть ли способ использовать SQL-запрос, чтобы узнать, сколько идентификаторов имеет «is_turned_on=true» или «is_turned_on=false»?

Комментарии:

1. Вы отметили две разные платформы баз данных, пожалуйста, добавьте правильный тег для используемой вами базы данных,

2. @Stu спасибо, добавили только postgresql