如果Oracle中的任何辅助记录匹配,如何忽略主记录?

时间:2014-09-08 01:39:18

标签: sql oracle

我有两个表A和B.表A是主产品表。表B包含产品外键参考以及开始和未来的到期日期。我想只提取那些只有所有未来到期日的产品。即使这些产品记录至少有一个开始日期和剩余的所有未来日期,我也不想查询这些记录。 那么,我如何在Oracle SELECT查询中获取这些记录?

SELECT * 
FROM PRODUCT A, PRODUCT_RELATION B 
WHERE A.ROW_ID = B.PROD_ID 
AND B.START_DATE (+) < SYSDATE 
AND A.NAME = 'Zinc' 

当我使用上面的查询时,即使有未来的日期记录,它也会给我过期的记录。即使产品关系表中有一条过期记录,我也想忽略所有记录

1 个答案:

答案 0 :(得分:0)

解决此问题的方法是获取符合您选择条件的所有行,然后过滤掉您不想要的日期。

使用子查询分解构造避免多次查询表。

with sqf as (SELECT *
              FROM PRODUCT A, PRODUCT_RELATION B 
              WHERE A.ROW_ID = B.PROD_ID 
              AND A.NAME = 'Zinc' )
select * 
from sqf
where sqf.row_id not in (select x.row_id
                         from sqf x
                         where x.START_DATE < SYSDATE)