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这个条件不符合的时候,他的子节点无论符合条件否,都不应该筛选出来了.
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这个条件不符合的时候,他的子节点无论符合条件否,都不应该筛选出来了.
最直接的方法是先把数据筛选后再做BOM展开也就是将BOM.EFFECTIVITY_DATE AND BOM.DISABLE_DATE这个条件不符合的的数据剔除后的查询结果作为一个查询对象了查询就好了
谢谢, 因为我是爆 BOM,数据比较多,所以不想那样!现在我找到一个方法了,就是把条件加到 START WITH 后面就可以达到父节点不符合条件,子节点就不会被选择了。再次谢谢!
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这个条件不符合的时候,他的子节点无论符合条件否,都不应该筛选出来了.
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这个条件不符合的时候,他的子节点无论符合条件否,都不应该筛选出来了.