sql server 中查找“张大”的所有后代,并标识出是第几代
时间: 2023-05-23 22:01:47 浏览: 98
您好,为您提供解答:首先,我们需要先建立一个表格来存储所有人的信息,类似于以下示例: CREATE TABLE family_tree ( name varchar(50) NOT NULL, parent varchar(50), generation int, PRIMARY KEY (name) ); 然后我们把每个人插入到这个表格中,同时记录他们的父亲和辈分: INSERT INTO family_tree(name,parent,generation) VALUES ('张大',NULL,1), ('张一','张大',2), ('张二','张大',2), ('张三','张一',3), ('张四','张一',3), ('张五','张二',3), ('张六','张二',3), ('张七','张三',4), ('张八','张三',4); 然后,我们可以使用递归的方式来查找一个人的所有后代,并标识出他们是第几代: WITH RECURSIVE descendants AS ( SELECT name, 1 AS generation FROM family_tree WHERE name = '张大' UNION ALL SELECT child.name, parent.generation + 1 FROM family_tree child INNER JOIN descendants parent ON child.parent = parent.name ) SELECT name, generation FROM descendants; 希望能够帮助您!
相关问题
SQL Server查找“张大”的所有后代,并标识出是第几代
这个问题可以通过使用递归CTE(公共表达式)解决。下面是示例代码:
WITH familyTree AS (
SELECT t1.ID, t1.Name, 1 AS Generation
FROM Persons t1
WHERE t1.Name = '张大'
UNION ALL
SELECT t2.ID, t2.Name, Generation + 1
FROM Persons t2
JOIN familyTree t3 ON t2.ParentID = t3.ID
)
SELECT Name, Generation
FROM familyTree
ORDER BY Generation, Name;
在这个例子中,我们首先选择所有的父母是“张大”的人,将他们的姓名和ID与一代作为起点存储在公共表达式(CTE)中。然后,我们找到他们每个人的后代,将后代的姓名、ID和代数记录到CTE中。我们使用GENERATION计算代数,最后按代数和姓名对结果进行排序。
请注意,这只是一个示例。在实际的应用程序中,您需要将查询适应您的数据结构。
阅读全文