SQL查询以获取使用最少联接的元素的祖父母父子关系

SQL查询以获取使用最少联接的元素的祖父母父子关系,sql,left-join,inner-join,Sql,Left Join,Inner Join,我有两个表,我想通过使用SQL查询来显示子表、父表和祖父母表,并尽量少使用联接,最好避免联接,因为我的实际表有数十万条记录 表1- | id | Name |:-----|------- | 1 | ab | 2 | cd | 3 | ef | 4 | xy | 5 | zx

我有两个表,我想通过使用SQL查询来显示子表、父表和祖父母表,并尽量少使用联接,最好避免联接,因为我的实际表有数十万条记录

表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
:


见:@Abhi。请解释最小使用联接意味着什么。@GordonLinoff最大1联接,我们可以使用子查询。@Abhi看来您对联接有一个误解。在大多数情况下,join是最快的方法。事实上,如果您搜索,您会发现转换为从其他方法连接是解决慢速查询的方法。毕竟,连接是关系模型中数据检索的核心——这就是关系数据库管理系统所做的。不要回避加入,拥抱他们。对演示的大量投票,让我这样的新手更清楚:- id | name | name | name -: | :--- | :--- | :--- 1 | ab | cd | ef 2 | cd | ef | null 4 | xy | zx | null 6 | mn | cd | ef 5 | zx | null | null 3 | ef | null | null