使用SQL命令查找记录- SQL中的树结构

本文关键字:SQL 结构 命令 查找记录 使用 | 更新日期: 2023-09-27 17:50:48

所以我有这个表的名字和出生/死亡日期的所有我的祖先,我正在使用一个家谱网站。关键字是ID,所有子元素的ParentID项将被设置为与父元素的ID相同。

ID - int (key)
FirstName - string
Lastname - string
Born - int
Died - int
ParentID - int
hasChildren - bool

我想在某种类型的树结构中显示它(这是后面的另一个问题)-现在我只是在GridView中显示它们。我在每行的开头有一个按钮,叫做Branch。当您在某人的记录上单击Branch时,它调用select函数来检索所选记录的ID,因此我可以使用select命令搜索具有与所选记录的ID匹配的ParentID的所有记录。在这样做时,我将用所选记录(父记录)的所有子记录重新填充网格。因为我不想在网格中显示ID和ParentID,所以我不能使用:

检索它
GridViewRow row = GridView1.Rows[GridView1.SelectedIndex];

我的想法是这样的:

        SqlDataSource ds = (SqlDataSource)GridView1.DataSourceObject;
    string selectstring = "SELECT [ID],[FirstName],[MiddleName],[LastName],[BirthDate],[DeathDate],[ParentID],[hasChild] FROM [test2].[dbo].[Geneology] where ParentID = " + x;
    SqlDataSource2.SelectCommand = selectstring;

,其中x是所选记录ID的字符串。我似乎无法弄清楚如何检索所选记录的ID而不显示在网格视图中。当我创建数据源时,我选择了所有列,但隐藏了ID和ParentID。现在它们不包括在gridview的行中。有什么好主意吗?我希望这足以解释它。

[edit] OK -我修好了。我需要设置DataKey为ID,所以GridView。SelectedValue返回ID。它现在起作用了。我只需要弄清楚如何回到一个级别,而不重新填充所有记录的网格。

使用SQL命令查找记录- SQL中的树结构

也许你正在寻找一种叫做分层查询的东西。

在Oracle中,你会做类似的事情:

select t.*
from table t
connect by t.id = t.parent_id
start with t.id = my_id
编辑:既然我又读了一遍你的问题,我认为你在谈论一些c#的事情,而我对此一无所知,所以不用介意我的回答