Как проверить, является ли X дочерним элементом Y или наоборот в MySQL? - PullRequest
0 голосов
/ 25 мая 2020

У меня есть таблица MySQL со структурой ниже (около 1 миллиона строк). Допустим, у меня есть два идентификатора (X и Y), как я могу эффективно проверить, является ли X дочерним (любого уровня) Y или наоборот? Моя версия сервера MySQL - 5.7.

Псевдокод

IF X is child of Y:
    SELECT hierarchy from Y to X
ELSE IF Y is child of X:
    SELECT hierarchy from X to Y
ELSE:
    SELECT nothing

Структура базы данных

parent_id | child_id | child_level
----------------------------------
1         | 5        | 1
1         | 6        | 1
1         | 2        | 1
2         | 7        | 2
2         | 8        | 2
2         | 9        | 2
2         | 4        | 2
2         | 3        | 2
3         | 10       | 3
3         | 11       | 3
4         | 12       | 3
4         | 13       | 3
4         | 14       | 3

1 Ответ

0 голосов
/ 25 мая 2020

Вы можете использовать повторный запрос - доступен только в MySQL 8.0:

with recursive cte as (
    select root_id parent_id, child_id from mytablbe where parent_id = :X
    union all
    select c.root_id, t.child_id 
    from cte c
    inner join mytable t on t.parent_id = c.child_id
)
select * from cte where child_id = :Y

Этот запрос проверяет, является ли :X родительским для :Y: если да, то возвращается одна строка , иначе строка не возвращается.

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