现有两个表 
表一 
lxid  name 
01    红文具盒 
02    铅笔 
表二 
id    lxid  upid 
1    01 
2    02    1 
3    02    1 
这两个表的意思是 
在文具盒中放了2只铅笔, 
现在想得到如下结果 
比如 
id  lxid    name      upname 
1    01    红文具盒 
2    02    铅笔        红文具盒 
3    02    铅笔        红文具盒

解决方案 »

  1.   

    利用 递归  /// <summary>
            /// 按照类别来排序,即按照树状
            /// </summary>
            /// <param name="oldTable"></param>
            /// <param name="newTable"></param>
            /// <param name="textField">显示的类别名称</param>
            /// <param name="idField">类别编号</param>
            /// <param name="parentIdField">父类编号</param>
            /// <param name="parentId">查询那个类别下的所有子类</param>
            /// <param name="depth"></param>
            public static void PopulateTable(DataTable oldTable, DataTable newTable, string textField, string idField, string parentIdField, int parentId, int depth)
            {
                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < depth; i++)
                {
                    if (i == (depth - 1))
                    {
                        builder.Append("┠");
                    }
                    else
                    {
                        builder.Append(" ");
                    }
                }
                depth++;
                string filterExpression = string.Format("{0}={1}", parentIdField, parentId);
                DataRow[] rowArray = oldTable.Select(filterExpression);
                if (rowArray.Length > 0)
                {
                    for (int j = 0; j < rowArray.Length; j++)
                    {
                        DataRow row = rowArray[j];
                        row.BeginEdit();
                        //对类别名称进行格式并缩进
                        row[textField + "Text"] = builder.ToString() + ((string)row[textField]);
                        row.EndEdit();
                        newTable.ImportRow(row);
                        //得到编号
                        int intParentID = (int)row[idField];
                        //根据新得到的 编号递规调用
                        PopulateTable(oldTable, newTable, textField, idField, parentIdField, intParentID, depth);
                    }
                }
            }
        }
      

  2.   

    先自连接得到
    id    lxid  upid  uplxid
    1    01 
    2    02    1     01
    3    02    1     01
    然后再与表一关联,得到名字
      

  3.   


    SELECT b.id, b.lxid, (SELECT a.NAME FROM a WHERE a.lxid=b.lxid) name, (SELECT a.NAME FROM a WHERE a.lxid = b.upid) upname
    FROM b 
      

  4.   

    我做了自连接,可是当upid为空时,出现了很多重复的记录
      

  5.   

    create table t_06(lxid varchar2(10),name varchar2(10));
    create table t_07(id int,lxid varchar2(10),upid int);
    insert into t_06 values('01','红文具盒');
    insert into t_06 values('02','铅笔');
    insert into t_07 values(1,'01',null);
    insert into t_07 values(2,'02',1);
    insert into t_07 values(3,'02',1);select c.id,c.lxid,c.name,d.name
    from
    (select a.id,a.lxid,b.name,a.upid from t_07 a,t_06 b
    where a.lxid=b.lxid) c,
    (select a.id,a.lxid,b.name,a.upid from t_07 a,t_06 b
    where a.lxid=b.lxid) d
    where c.upid=d.id(+)
      

  6.   

    哈哈,非常感谢zxf_feng提供的2次帮助