我有两个表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'
当我使用上面的查询时,即使有未来的日期记录,它也会给我过期的记录。即使产品关系表中有一条过期记录,我也想忽略所有记录
答案 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)