Я пытаюсь преобразовать этот запрос в один, используя self join
.
SELECT leftn AS SId,
TId
FROM test_tree
INNER JOIN
(SELECT @sid:=
(SELECT group_concat(leftn, ',', rightn)
FROM test_tree
WHERE find_in_set(sid, @nsid)) , @nsid:=@sid AS fset
FROM test_tree,
(SELECT @nsid:='AMSJUTATE',@sid='')v)gr ON find_in_set(leftn, fset)
WHERE leftn <> ''
UNION (
SELECT rightn AS SId,
TId
FROM test_tree
INNER JOIN
(SELECT @sid:=
(SELECT group_concat(leftn, ',', rightn)
FROM test_tree
WHERE find_in_set(sid, @nsid)) , @nsid:=@sid AS fset
FROM test_tree,
(SELECT @nsid:='AMSJUTATE',@sid='')v)gr ON find_in_set(rightn, fset)
WHERE rightn <> ''
Этот запрос означает, что родитель оставил дочерний и правый дочерний, и я нахожу все дочерние узлы одного родителя через Union, но я хочу сделать это по-другому. Может ли кто-нибудь преобразовать этот запрос в само присоединение? Я не знаю, как преобразовать этот запрос.
Вот пример данных, с которыми я работаю:
SELECT * FROM `test_tree`
TId SId LeftN RightN LStatus RStatus
1 - AMSJUTATE 1
2 AMSJUTATE AMSNUDUCU AMSFEZAVU 1 1
3 AMSNUDUCU AMSGUWUDE AMSTUTUNE 1 1
4 AMSFEZAVU AMSXAWUXU AMSHALURA 1 1
5 AMSGUWUDE AMSZUCIVO AMSKEFOFA 1 1
6 AMSTUTUNE AMSFASOJA AMSZAPUPE 1 1
7 AMSXAWUXU AMSTEMUJI AMSPOROBE 1 1
8 AMSHALURA AMSBIZEZO AMSFOHOFI 1 1
9 AMSZUCIVO AMSXUDINE 1
10 AMSKEFOFA AMSZEVUTA 1
11 AMSFASOJA AMSREXEGI 1
12 AMSZAPUPE AMSBIXIBO 1
13 AMSTEMUJI AMSHEFOVI 1
14 AMSPOROBE AMSLUPAKE 1
15 AMSBIZEZO AMSCUSIPU 1
16 AMSFOHOFI AMSCEMUSU 1
17 AMSXUDINE AMSKATOTU 1
18 AMSZEVUTA AMSLECEVU 1
19 AMSREXEGI AMSKOVUSA 1
20 AMSBIXIBO AMSLIWULO 1
21 AMSHEFOVI AMSJOLOWE 1
22 AMSLUPAKE AMSREROXE 1
23 AMSCUSIPU AMSPOMUBE 1
24 AMSCEMUSU AMSPULINU 1
25 AMSPULINU AMSWOFIVO 1