иерархическая структура запроса в MySQL - PullRequest
0 голосов
/ 28 января 2019
-- PARENT_TABLE
seq     parent_id   name
0                   root
1       0           node1
2       1           node1_1
3       2           node1_1_1
4       1           node1_2
5       2           node1_1_2

-- CHILD_TABLE
id      name        flag
0       node1_1_1   true
1       node1_2     true
2       node1_1_2   false

-- Structure
(
        root
        └node1
          └node1_1
            └node1_1_1
            └node1_1_2
          └node1_2
    )
  1. В CHILD_TABLE хранятся только листовые узлы PARENT_TABLE.(PARENT_TABLE.name == CHILD_TABLE.name)

  2. PARENT_TABLE имеет иерархическую структуру.

  3. То, что я хочу найти, я хочу найтивсе имена от PARENT_TABLE до их родителей, чей столбец флага в таблице CHILD_TABLE равен true

  4. Пример желаемых результатов (без сортировки)

seq parent_id name 3 2 node1_1_1 2 1 node1_1 1 0 node1 0 root 4 1 node1_2

1 Ответ

0 голосов
/ 28 января 2019

Возможно, вы можете использовать CTE:

WITH parents AS
(SELECT seq,parent_id,name FROM tblParent LEFT JOIN tblChild USING(name) WHERE flag
UNION ALL
SELECT c.seq,c.parent_id,c.name FROM tblParent AS c INNER JOIN parents ON parents.parent_id = c.seq)
SELECT * FROM parents 
...