第一张表母件表 表名(parent)
列值如下:
BOMID parentName
10001 电脑
10002 主机
10003 华硕主板第二张表子件表 表名(child)
列值如下:
BOMID childID childName
10001 C0001 主机
10001 C0002 显示器
10002 C0003 华硕主板
10002 C0004 Intel CPU
10002 C0005 希捷硬盘
10002 C0006 内存
10002 C0007 显卡
10003 C0008 南桥
10003 C0009 北桥
第三张表子件替代料表(replace)
childID replaceID replaceName
C0004 D0001 AmdCPU
C0005 D0002 西数硬盘
查询母件ParentName=电脑,怎样可得到下表
level id name
+ C0001 主机
++ C0003 华硕主板
+++ C0008 南桥
+++ C0008 北桥
++ C0004 Intel CPU
替代 D0001 AMD CPU
++ C0005 希捷硬盘
替代 D0002 西数硬盘
++ C0006 内存
++ C0007 显卡
+ C0002 显示器
列值如下:
BOMID parentName
10001 电脑
10002 主机
10003 华硕主板第二张表子件表 表名(child)
列值如下:
BOMID childID childName
10001 C0001 主机
10001 C0002 显示器
10002 C0003 华硕主板
10002 C0004 Intel CPU
10002 C0005 希捷硬盘
10002 C0006 内存
10002 C0007 显卡
10003 C0008 南桥
10003 C0009 北桥
第三张表子件替代料表(replace)
childID replaceID replaceName
C0004 D0001 AmdCPU
C0005 D0002 西数硬盘
查询母件ParentName=电脑,怎样可得到下表
level id name
+ C0001 主机
++ C0003 华硕主板
+++ C0008 南桥
+++ C0008 北桥
++ C0004 Intel CPU
替代 D0001 AMD CPU
++ C0005 希捷硬盘
替代 D0002 西数硬盘
++ C0006 内存
++ C0007 显卡
+ C0002 显示器
解决方案 »
- 请问一下SQL SERVER的登陆与数据库用户必须是一一对应吗,能否一个数据库用户对应多个登陆帐号?
- SQL 可不可以这样查询
- 将 varchar 值 'bb ' 转换为数据类型为 int 的列时发生语法错误。
- 在mssql里面,可以是用正则表达式RegularExpression么?
- 不同機器查詢問題?
- 菜鸟问题:两个表,一对多,如何写View?
- 关于delphi连结mssqlserver的问题
- 高手请进
- 存储过程使用了多个Select,怎样把多个记录集传送给客户端程序呢?比如.net下编程
- vfp:项目在联编成可执行文件后,点击可执行文件,该文件没反应
- 用INSERT插入数据
- 求一个SQL,多谢了。(建表和初始化数据的sql已经在帖子里了)
declare @parent table (BOMID int,parentName varchar(8))
insert into @parent
select 10001,'电脑' union all
select 10002,'主机' union all
select 10003,'华硕主板'declare @child table (BOMID int,childID varchar(5),childName varchar(13))
insert into @child
select 10001,'C0001','主机' union all
select 10001,'C0002','显示器' union all
select 10002,'C0003','华硕主板' union all
select 10002,'C0004','Intel CPU' union all
select 10002,'C0005','希捷硬盘' union all
select 10002,'C0006','内存' union all
select 10002,'C0007','显卡' union all
select 10003,'C0008','南桥' union all
select 10003,'C0009','北桥'declare @replace table (childID varchar(5),replaceID varchar(5),replaceName varchar(8))
insert into @replace
select 'C0004','D0001','AmdCPU' union all
select 'C0005','D0002','西数硬盘'select case BOMID when 10001
then '+' when 10002 then '++' when 10003 then '+++' end as level,
childID,childName from @child union all
select '代替' as level,childID,replaceName from @replace
order by childID,level
/*
level childID childName
----- ------- -------------
+ C0001 主机
+ C0002 显示器
++ C0003 华硕主板
++ C0004 Intel CPU
代替 C0004 AmdCPU
++ C0005 希捷硬盘
代替 C0005 西数硬盘
++ C0006 内存
++ C0007 显卡
+++ C0008 南桥
+++ C0009 北桥
*/
2.然后查询子件表中的BOMID等于刚刚查询得到的母件表的BOMID,这样可以得到该母件下第一级的子件ID(childID)
3.根据查第二步查 找到的子件ID查找替代料表中是否存在相同的子件ID,这样可以得到该子件的替代料
4.根据第二步在子件表中查找到的子件ID,查找到该子件对应的BOMID,然后反查母件表是否存在相同的BOMID,
若母件中存在相同的BOMID,表名该子件下面仍有子件,这样循环第2,3,4步,依次得到所有件的子件及替代料。实现代码就不知道该怎么去做了
这是我要求实现的效果,每一个母件下面,直接跟自己的下级子件
level id name
+ C0001 主机
++ C0003 华硕主板
+++ C0008 南桥
+++ C0008 北桥
++ C0004 Intel CPU
替代 D0001 AMD CPU
++ C0005 希捷硬盘
替代 D0002 西数硬盘
++ C0006 内存
++ C0007 显卡
+ C0002 显示器
而不是像这样level childID childName
----- ------- -------------
+ C0001 主机
+ C0002 显示器
++ C0003 华硕主板
++ C0004 Intel CPU
代替 C0004 AmdCPU
++ C0005 希捷硬盘
代替 C0005 西数硬盘
++ C0006 内存
++ C0007 显卡
+++ C0008 南桥
+++ C0009 北桥
*/