如何在SQL中使用相同的表连接名称?

时间:2011-10-07 20:11:26

标签: c# asp.net sql sql-server

我有一个带有SiteUserID,FirstName,LastName和SiteUserParentID的表SiteUsers。

为每个SiteUser分配一个引用SiteUserID的SiteUserParentID。

我想显示与SiteUser全名的关系以及他们被分配到的全名。

这样做的最佳方式是什么?

    SiteUserID, FirstName, LastName ParentID
      1       , John     , Doe     , 1
      2       , Sallie   , Smith   , 1

我正在寻找输出:

ChildName   , ParentName
John Doe    , John Doe
Sallie Smith, John Doe

我当然希望将其转储到asp.net转发器中并输出为:

John Doe is assigned to John Doe
Sallie Smith is assigned to John Doe

目前,我在看:

John Doe is assigned to 1
Sallie Smith is assigned to 1

使用以下内容:

    static public List<SiteUser> GetSiteUserListFullName()
{
    List<SiteUser> thelist = new List<SiteUser>();
    string sql = "select SiteUserID, SiteUserFirstName + ' ' + SiteUserLastName as SiteUserName, SiteUserParentID from SiteUsers where SiteUserActive = 1";
    SqlDataReader dr = DBUtil.FillDataReader(sql);

    while (dr.Read())
    {
        SiteUser obj = new SiteUser();

        obj.siteUserID = Convert.ToInt32(dr["siteUserID"].ToString());
        obj.siteUserFirstName = Convert.ToString(dr["siteUserName"].ToString());
        obj.siteUserParentID = Convert.ToInt32(dr["siteUserParentID"].ToString());
        thelist.Add(obj);
    }
    return thelist;
}

这在我的代码背后:

    repeaterTeams.DataSource = SiteUser.GetSiteUserListFullName();
    repeaterTeams.DataBind();

这是在前端:

<asp:Repeater ID="repeaterTeams" runat="server">
<HeaderTemplate>
    <table class="horTable">
    <tr class="tableHeader">
        <td class="first">Assignment</td>
        <td class="last">Edit</td>
    </tr>
</HeaderTemplate>
<ItemTemplate>
    <tr class="tableRow">
        <td><%#DataBinder.Eval(Container.DataItem, "SiteUserFirstName")%> is assigned to <%#DataBinder.Eval(Container.DataItem, "SiteUserParentID")%></td>
        <td class="last"><a href="selected-team.aspx?id=<%#DataBinder.Eval(Container.DataItem, "SiteUserID")%>">Select</a></td>
    </tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>

感谢任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:7)

您需要自己加入表格。

示例:

select 
    child.SiteUserFirstName + ' ' + child.SiteUserLastName as ChildName,
    parent.SiteUserFirstName + ' ' + parent.SiteUserLastName as ParentName 
from 
    SiteUsers as child
inner join 
    SiteUsers as parent on child.SiteUserParentID = parent.SiteuserID
where 
    child.SiteUserActive = 1

答案 1 :(得分:2)

您需要使用self join

答案 2 :(得分:0)

您可以将表连接到自身,因此sql将是:

select 
    a.SiteUserID, 
    a.SiteUserFirstName + ' ' + a.SiteUserLastName as SiteUserName,
    b.SiteUserFirstName + ' ' + b.SiteUserLastName as ParentName,
SiteUserParentID 
from SiteUsers a
JOIN SiteUsers b
on a.ParentID = b.SiteUserID
where SiteUserActive = 1