使用in子句跨越多个表的分层RDBMS查询

时间:2015-06-09 05:57:23

标签: sql oracle rdbms recursive-query

我有一张产品表。每个产品至少有一个版本在PROD_VERSION中维护(ProdID引用Product.ProdID)

现在,每个版本的产品都可以包含0个或多个子产品。关系存储在ProdAssoc表中(ParentVersionID引用PROD_VERSION.version_D,childProdId引用Product.ProdID)

现在,在从UI创建新产品时,用户可以选择零个或多个子产品。

我需要检查现有的复合产品是否具有直接或间接作为儿童的同一组原子产品(没有儿童产品)。

我想出了

 SELECT level, view1.* FROM 
  (SELECT ps.ProdID pid, cpsn.ParentVersionID , cpsn.childProdId apid
    FROM Product ps, PROD_VERSION psv, ProdAssoc cpsn 
    WHERE psv.version_D = cpsn.ParentVersionID 
       AND ps.ProdID = psv.ProdID ) view1
   CONNECT BY prior pid = apid
   START WITH apid IN (318, 323, 320);

在这方面的任何帮助/改进都将受到高度赞赏。

环境

数据库: Oracle Database 12c企业版12.1.0.2.0版 - 64位生产 PL / SQL版本12.1.0.2.0 - 生产 “核心12.1.0.2.0生产” 适用于Linux的TNS:版本12.1.0.2.0 - 生产 NLSRTL版本12.1.0.2.0 - 生产

爪哇: java版“1.7.0_07” Java(TM)SE运行时环境(版本1.7.0_07-b10) Java HotSpot(TM)64位服务器VM(版本23.3-b01,混合模式)

服务器:红帽JBoss企业应用平台 - 版本6.3.3.GA

操作系统: Linux kolps46 2.6.32-431.20.3.el6.x86_64#1 SMP Fri Jun 6 18:30:54 EDT 2014 x86_64 x86_64 x86_64 GNU / Linux

0 个答案:

没有答案