假设有一个产品的阶层结构如下:
A
|
--------------------
| |
B A01
|
------
| |
B1 C
|
-----
| |
C1 C2设计的后台表为T1和T2两个表格
T1表结构(产品代码,产品说明)
数据如下:[储存成品和半成品物料]
-------------
A 包装
B 后焊
C SMTT2表结构(子产品代码,子产品说明,用量)
数据如下:[储存以上T1表下的子物料]
-------------------------------------------
B 包装阶下半成品物料 1
A01 包装阶下包装袋物料 1
C 后焊阶下半成品物料 2
B01 后焊阶下原物料 1
C01 SMT阶下原物料 2
C02 SMT阶下原物料 1以下是建表语句、测试数据INSERT语句:
create table T1
(
T1_ID NUMBER(20) not null,
BOM_C VARCHAR2(32),
BOM_NAME VARCHAR2(32)
);
create table T2
(
T1_ID NUMBER(20),
T2_ID NUMBER(20) not null,
STK_C VARCHAR2(32),
STK_NAME VARCHAR2(32),
QTY NUMBER(20,6)
);
INSERT INTO T1 VALUES ('10001','A','包装');
INSERT INTO T1 VALUES ('10002','B','后焊');
INSERT INTO T1 VALUES ('10003','C','SMT');
INSERT INTO T2 VALUES ('10001','120001','B','包装阶下半成品物料',1);
INSERT INTO T2 VALUES ('10001','120002','A01','包装阶下包装袋物料',1);
INSERT INTO T2 VALUES ('10002','210001','C','后焊阶下半成品物料',2);
INSERT INTO T2 VALUES ('10002','210002','B01','后焊阶下原物料',1);
INSERT INTO T2 VALUES ('10003','130001','C01','SMT阶下原物料',1);
INSERT INTO T2 VALUES ('10003','130002','C02','SMT阶下原物料',1);
COMMIT;期望结果:
当我指定成品A时,能从T1表和T2表里抓出产品A的整个BOM物料。
请问如何通过SQL语句把该BOM查询展开?
想用START WITH ... connect by ...? 可是不会两个关联表的循环查询
A
|
--------------------
| |
B A01
|
------
| |
B1 C
|
-----
| |
C1 C2设计的后台表为T1和T2两个表格
T1表结构(产品代码,产品说明)
数据如下:[储存成品和半成品物料]
-------------
A 包装
B 后焊
C SMTT2表结构(子产品代码,子产品说明,用量)
数据如下:[储存以上T1表下的子物料]
-------------------------------------------
B 包装阶下半成品物料 1
A01 包装阶下包装袋物料 1
C 后焊阶下半成品物料 2
B01 后焊阶下原物料 1
C01 SMT阶下原物料 2
C02 SMT阶下原物料 1以下是建表语句、测试数据INSERT语句:
create table T1
(
T1_ID NUMBER(20) not null,
BOM_C VARCHAR2(32),
BOM_NAME VARCHAR2(32)
);
create table T2
(
T1_ID NUMBER(20),
T2_ID NUMBER(20) not null,
STK_C VARCHAR2(32),
STK_NAME VARCHAR2(32),
QTY NUMBER(20,6)
);
INSERT INTO T1 VALUES ('10001','A','包装');
INSERT INTO T1 VALUES ('10002','B','后焊');
INSERT INTO T1 VALUES ('10003','C','SMT');
INSERT INTO T2 VALUES ('10001','120001','B','包装阶下半成品物料',1);
INSERT INTO T2 VALUES ('10001','120002','A01','包装阶下包装袋物料',1);
INSERT INTO T2 VALUES ('10002','210001','C','后焊阶下半成品物料',2);
INSERT INTO T2 VALUES ('10002','210002','B01','后焊阶下原物料',1);
INSERT INTO T2 VALUES ('10003','130001','C01','SMT阶下原物料',1);
INSERT INTO T2 VALUES ('10003','130002','C02','SMT阶下原物料',1);
COMMIT;期望结果:
当我指定成品A时,能从T1表和T2表里抓出产品A的整个BOM物料。
请问如何通过SQL语句把该BOM查询展开?
想用START WITH ... connect by ...? 可是不会两个关联表的循环查询
解决方案 »
- 定义函数返回值类型为对象,如何调用?
- 平时自己学习的话,下载哪个版本?
- 关于字符集的问题,我往表插入数据的时候中文可以显示,但是过程写备注的时候却显示乱码
- 已建好的表,没有建分区,现在要建分区了,如何建,不删除表的情况下
- import导入数据用语句怎么写
- 触发器高手请进,如何写这样的触发器
- 帮忙看下PRO*C是不是写的有些问题,整了个下午了,老是编译不过
- 第一次安装学习oracle 9i (9.2.0.1.0) 并还原了一备份数据库 但不知道在那个菜单下可以找到表?
- 外连接的问题(急)
- 帮忙啊!如何用orcale的存储过程作为数据窗口的数据源.
- Oracle 9i备份还原ORA-01920错误
- sqlplus的输出问题
SQL> select * from (
2 SELECT T1.BOM_C 父代码 ,T1.BOM_NAME 父名称 ,
3 T2.STK_C 子代码 ,T2.STK_NAME 子名称 ,T2.QTY 装配量
4 FROM T1
5 LEFT JOIN T2 ON T1.T1_ID = T2.T1_ID
6 ) s
7 START WITH S.父代码='A'
8 CONNECT BY PRIOR S.子代码 =S.父代码
9 order by 父代码
10 ;
父代码 父名称 子代码 子名称 装配量
-------------- ----------- ---------- ------------------- --------------
A 包装 A01 包装阶下包装袋物料 1.000000
A 包装 B 包装阶下半成品物料 1.000000
B 后焊 B01 后焊阶下原物料 1.000000
B 后焊 C 后焊阶下半成品物料 2.000000
C SMT C02 SMT阶下原物料 1.000000
C SMT C01 SMT阶下原物料 1.0000006 rows selected