现有两个表
表一
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 铅笔 红文具盒
表一
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 铅笔 红文具盒
解决方案 »
- Oracle8i到11g,字符集us7ascii到ZHS16GBK转换中文显示为?,求解
- 解释“TYPE dept_table_type IS TABLE OF departments.department_name%TYPE INDEX BY PL
- Oracle中的check约束问题——4位字符型数字的约束问题
- 看看这三种方式实现的分页哪种最高效
- 一个ORACLE交流群,希望大家参加!!!
- Oracle Dblink查询速度慢
- 如何删除重复记录!
- 请问Oracle有哪些内置对象,类似sysdate
- Install Oracle 8.0.5 on Win 2003 Server Error
- ORACLE如何在启动的时候设置数据库为自动打开
- 问个问题
- 急,求一sql语句
/// 按照类别来排序,即按照树状
/// </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);
}
}
}
}
id lxid upid uplxid
1 01
2 02 1 01
3 02 1 01
然后再与表一关联,得到名字
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
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(+)