sql父子表面试题

标签 sql database

面试时被问到这个问题,但我对SQL不熟悉。 我希望有人能帮我解决这个问题,这样我就能理解这个概念。

"id"  "name"   "parentid"
------------------------
"1"   "BOSS1"  null
"2"   "A"      "1"
"3"   "B"      "1"
"4"   "C"      "3"
"5"   "BOSS2"  null
"6"   "Q"      "5"
"7"   "T"      "6"
  1. 给定一个id,找到所有的 child

所以对于 1,它应该打印 1, 2 ,3, 4

我认为这很简单,但我不知道如何使用联合构造查询...

谢谢

最佳答案

为了比“ child ”更深入,CTE 工作得很好 -

WITH CTEExample (ID, Name, Parent)
    AS
    (
        SELECT e.ID, e.Name, e.Parent 
        FROM dbo.ExampleTable e WHERE e.ID = 1

        UNION ALL

        SELECT e.ID, e.Name, e.Parent 
        FROM dbo.ExampleTable e
        JOIN CTEExample ON e.Parent = CTEExample.ID
    )
   select ID from CTEExample

这应该返回 1,2,3,4。

编辑 - 看起来 Jon 在这方面先于我;尽管我认为他的第 4 行应该是 where ID = 1,而不是 where ParentID = 1

希望这对您有所帮助。

关于sql父子表面试题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837674/

相关文章:

mysql - 行之间的sql分割数

database - 有没有办法获取 SQLITE 中 View 的列数据类型?

java - 使用 Hypersonic 数据库的 JUnit 测试

java - 如何将 "hh:mm:ss"转换为sql更新的间隔

sql - 从字符串中提取可变长度子字符串

mysql - 在具有缺失值的列上设置 AUTO_INCREMENT

android - 从数据库获取数据时应用崩溃

mysql - 混合数据库关系?

mysql - 创建 IF 语句 if "Variable"!= NULL then WHERE 子句

sql - 在具有不同名称的列上连接表但在结果中产生单列