Oracle 11g - 递归表 - 如何从简单的递归表中显示信息

时间:2015-03-24 18:51:13

标签: oracle oracle11g

初学者......

如果我有一个有递归的表,需要帮助才能显示以下内容。

大学生表,其中一些是教师和学生。所以,有些学生可以教其他学生,因为他们是老师。

|SID|  FName  |  LName  |  Phone  |  Teacher  |

----------------------------------------------------------

|1 |  John   |  Smtih  |  123    |  Null     |

|2 |  Susan  |  Johnson|  321    |  1        |

|3 |  Jane   |  Doe    |  456    |  1        | 

|4 |  Mike   |  Jones  |  654    |  Null     |

|5 |  Doug   |  Houston|  789    |  4        | 

教师字段与Student_ID字段相关(因此该表的递归性质)。

我需要拿出SQL命令显示下表(FName,LName和老师的名字):

|  FName  |  LName  |  Teacher    |

-----------------------------------

|  John   |  Smtih  |  Null       | 

|  Susan  |  Johnson|  John Smith | 

|  Jane   |  Doe    |  John Smith | 

|  Mike   |  Jones  |  Null       | 

|  Doug   |  Houston|  Mike Jones | 

如果我运行以下内容:

SELECT FName,LName,Teacher
FROM TableA;

我得到了我需要的大部分内容,但教师由Student_ID代表。如何在Student_ID出现的位置显示学生姓名?

1 个答案:

答案 0 :(得分:0)

您可以自我加入同一个表,将其作为外部联接以允许空教师值,并连接教师的名字/姓氏。像这样:

SELECT a.FName, a.LName, b.FName || ' ' || b.LName
  FROM TableA a
  LEFT JOIN TableA b ON (a.Teacher = b.SID)