【发布时间】:2022-01-28 06:32:05
【问题描述】:
我有以下简单的 SELECT 语句:
SELECT COUNT (*)
FROM EPS_PROPOSAL prop
WHERE prop.REQUESTED_START_DATE_INITIAL >= DATE '2018-10-01';
-- 2183
现在,我想加入我的 EPS_PROPOSAL 表中的另外 2 个表。
BUDGET_DOCUMENT 和 BUDGET
3张表的关系是这样的:
EPS_PROPOSAL.DOCUMENT_NUMBER ===> BUDGET_DOCUMENT.PARENT_DOCUMENT_KEY
BUDGET_DOCUMENT.DOCUMENT_NUMBER ===> BUDGET.DOCUMENT_NUMBER
鉴于这种关系,我不理解以下结果:
SELECT COUNT (*)
FROM EPS_PROPOSAL prop
JOIN BUDGET_DOCUMENT doc on prop.DOCUMENT_NUMBER = doc.PARENT_DOCUMENT_KEY
JOIN BUDGET bud on doc.DOCUMENT_NUMBER = bud.DOCUMENT_NUMBER
WHERE prop.REQUESTED_START_DATE_INITIAL >= DATE '2018-10-01' AND bud.FINAL_VERSION_FLAG = 'Y';
-- 1585
查看后面的SELECT 语句的实际记录,我注意到它忽略了所有BUDGET.TOTAL_COST 是NULL 和BUDGET.FINAL_VERSION_FLAG 是NULL 的记录。
SELECT prop.NPS_PROPOSAL_NUMBER, bud.TOTAL_COST FROM EPS_PROPOSAL prop
JOIN BUDGET_DOCUMENT doc on prop.DOCUMENT_NUMBER = doc.PARENT_DOCUMENT_KEY
JOIN BUDGET bud on doc.DOCUMENT_NUMBER = bud.DOCUMENT_NUMBER
WHERE prop.REQUESTED_START_DATE_INITIAL >= DATE '2018-10-01' AND bud.FINAL_VERSION_FLAG = 'Y'
ORDER BY TO_NUMBER(prop.NPS_PROPOSAL_NUMBER); -- 1585
问题:如何包含与这 3 个表相交的所有记录,包括 BUDGET 表的记录 WHERE TOTAL_COST 和 FINAL_VERSION_FLAG 也是 NULL 但仍满足我的 >= DATE 过滤器?
【问题讨论】:
-
好吧,花点时间用名为
A、B和C的表重建您的问题,其中包含的不是数千行,而是6行。比发布带有DDL和数据的完整 示例。 很好的机会是您将在本练习中获得解决方案。提示 - 检查join和outer join之间的区别。