假设有一个产品的阶层结构如下:
              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 ...? 可是不会两个关联表的循环查询

解决方案 »

  1.   

    条件是什么,输出什么?从你的描述看,用表关联就可以了,用的到start with?
      

  2.   

    一个表的递归还写的出来,两个表的递归就提示出错:用户数据下的connect by循环各位帮忙看看,谢谢!
      

  3.   


    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