SQL查询以最少使用JOINS的方式获取元素的祖父母-父母-子女关系

我有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(cd)的子代,2是3(ef)的子代,因此输出-> 1 cd ef

评论
  • 太过于执着
    太过于执着 回复

    您需要加入。其他方法(例如使用递归查询)的效率将会降低。如果您有正确的索引,则联接不一定会对性能造成损害。

    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
    

    Demo on DB Fiddle:

    id |名称|名称|名称
    -:| :--- | :--- | :---
     1 | ab | cd | ef
     2 | cd | ef |空值
     4 | xy | zx |空值
     6 | mn | cd | ef
     5 | zx |空|空值
     3 | ef |空|空值