#mysql #select #nested #parent #children
#mysql #выберите #вложенный #родительский #дочерние элементы
Вопрос:
То, что я хочу иметь, — это все родительские номера, которые являются дочерними элементами от нескольких других родителей, которые также являются дочерними элементами от одного другого родителя. Все строки находятся внутри одной таблицы.
Теперь то, что у меня есть до сих пор, это (и это работает):
SELECT *
FROM location
WHERE parentid IN (
SELECT id
FROM location
WHERE parentid IN (
SELECT id
FROM location
WHERE parentid = 0
)
)
Единственное, что мне интересно, это будет ли какой-нибудь лучший / более быстрый способ добиться того же самого? Таблица состоит примерно из 200.000 строк.
Комментарии:
1. Вы могли бы выполнить самосоединение.
SELECT * FROM location a INNER JOIN location b ON b.parentid = a.parentid ....
Ответ №1:
Если я правильно понимаю, вы хотите внуков parentid = 0
. Лично я считаю, что явные объединения легче выполнять и, вероятно, приведут к лучшему плану выполнения:
select l2.*
from location l join
location l1
on l1.parentid = l.parentid join
location l2
on l2.parentid = l1.id
where l.parentid = 0;
Единственное предостережение: возможно where
, оператор должен быть where l.id = 0
. В этом случае вы действительно можете упростить запрос до:
select l2.*
from location l1
location l2
on l2.parentid = l1.id
where l1.parentid = 0;