SQL запрос для получения отношения дедушка-родитель-ребенок элемента с минимальным использованием JOINS - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть 2 таблицы, и я хочу отобразить дочерний элемент, родитель и дедушку с помощью запроса SQL с минимальным использованием JOINS (желательно избегать JOINS, поскольку в моей фактической таблице есть сотни тысяч записей) ,

Таблица 1 -

| id   | Name               
|:-----|-------
| 1    | ab                           
| 2    | cd                         
| 3    | ef                          
| 4    | xy 
| 5    | zx
| 6    | mn

Таблица 2:

pop   | kid

|:-----|------
| 2    | 1                           
| 3    | 2                         
| 5    | 4                         
| 2    | 6 

вывод -

child  parent  grandfather
1          cd       ef
2      ef
4      zx
6      cd

например: 1 является дочерним по отношению к 2 (кд) и 2 является дочерним по отношению к 3 (ef), следовательно, вывод -> 1 cd ef

1 Ответ

1 голос
/ 07 февраля 2020

Вам нужно присоединиться. Другие подходы, такие как использование рекурсивного запроса, будут менее эффективными. Объединения не обязательно вредны для производительности, если у вас есть правильные индексы.

select t1c.id, t1c.name, t1p.name, t1g.name
from table1 t1c
left join table2 t2c on t2c.kid = t1c.id
left join table1 t1p on t1p.id  = t2c.pop
left join table2 t2g on t2g.kid = t1p.id
left join table1 t1g on t1g.id  = t2g.pop

Демонстрация на DB Fiddle :

id | name | name | name
-: | :--- | :--- | :---
 1 | ab   | cd   | ef  
 2 | cd   | ef   | <em>null</em>
 4 | xy   | zx   | <em>null</em>
 6 | mn   | cd   | ef  
 5 | zx   | <em>null</em> | <em>null</em>
 3 | ef   | <em>null</em> | <em>null</em>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...