使用 START WITH CONNECT BY, 如果关联的某个节点不符合条件, 这个节点后所有的数据都不再作为结果筛选出来了, 应该怎么实现?

解决方案 »

  1.   

    WHERE BOM.COMPANY_ID = 84
               AND SYSDATE BETWEEN BOM.EFFECTIVITY_DATE AND BOM.DISABLE_DATE
               AND BOM.COMPONENT_PRODUCT_CODE = BOM2.ASSEMBLY_PRODUCT_CODE(+)
             START WITH BOM.ASSEMBLY_PRODUCT_CODE = '80-5237-01-00'
            CONNECT BY BOM.ASSEMBLY_PRODUCT_CODE = PRIOR
                       BOM.COMPONENT_PRODUCT_CODE
    就是当BOM.EFFECTIVITY_DATE AND BOM.DISABLE_DATE这个条件不符合的时候,他的子节点无论符合条件否,都不应该筛选出来了.
      

  2.   

    WHERE BOM.COMPANY_ID = 84
               AND SYSDATE BETWEEN BOM.EFFECTIVITY_DATE AND BOM.DISABLE_DATE
               AND BOM.COMPONENT_PRODUCT_CODE = BOM2.ASSEMBLY_PRODUCT_CODE(+)
             START WITH BOM.ASSEMBLY_PRODUCT_CODE = '80-5237-01-00'
            CONNECT BY BOM.ASSEMBLY_PRODUCT_CODE = PRIOR
                       BOM.COMPONENT_PRODUCT_CODE
    就是当某个节点的BOM.EFFECTIVITY_DATE AND BOM.DISABLE_DATE这个条件不符合的时候,他的子节点无论符合条件否,都不应该筛选出来了.
      

  3.   

    最直接的方法是先把数据筛选后再做BOM展开也就是将BOM.EFFECTIVITY_DATE AND BOM.DISABLE_DATE这个条件不符合的的数据剔除后的查询结果作为一个查询对象了查询就好了
      

  4.   

    谢谢, 因为我是爆 BOM,数据比较多,所以不想那样!现在我找到一个方法了,就是把条件加到 START WITH 后面就可以达到父节点不符合条件,子节点就不会被选择了。再次谢谢!