【发布时间】:2021-04-11 08:51:28
【问题描述】:
我已经尝试了以下查询,但我仍然收到此错误并且我无法找到解决它的解决方案。我希望能够根据情况获得三个日期之一(LOAD,LAST_MODIFIED,ORDER_ITEM_LAST_UPDATE)。但是,我还需要使用实际的日历日期来使用里面的特定列。这就是为什么我使用 LOAD_DATE 进行连接 (+)。现在,我试图找到一种方法来避免出现错误 ORA-01719,有人可以帮助我吗?
ORA-01719: OR 或 IN 的操作数中不允许外连接运算符 (+) 01719. 00000 - “OR 或 IN 的操作数中不允许外连接运算符 (+)” *原因:外连接出现在 or 子句中。 *Action:如果 A 和 B 是谓词,得到 (A(+) 或 B) 的效果, 尝试(选择哪里(A(+)而不是B))联合所有(选择哪里(B))。 行错误:17 列:35
代码:
SELECT A.PRODUCT_ID AS KEY,
TO_CHAR(A.ORDER_DATE, 'MM/DD/YYYY') AS ORDER_CREATION_DATE,
TO_CHAR(B.LOAD_DATE, 'MM/DD/YYYY') AS LOAD_DATE,
TO_CHAR(B.LAST_MODIFIED_DATE, 'MM/DD/YYYY') AS LAST_MODIFIED_DATE,
TO_CHAR(B.ORDER_ITEM_LAST_UPDATED, 'MM/DD/YYYY') AS ORDER_ITEM_LAST_UPDATED,
A.ORDER_STATUS AS ORDER_STATUS,
A.ORDER_ITEM_STATUS AS ORDER_ITEM_STATUS,
A.ORDER_ACTION AS ORDER_ACTION,
NVL(B.ORDER_ITEM_ACTION, 'NOT APPLICABLE') AS ORDER_ITEM_ACTION,
NVL(B.CEASE_REASON, 'NOT APPLICABLE') AS ORDER_CEASE_REASON,
A.PRO_SYSTEM AS PRO_SYSTEM,
CASE WHEN (A.PRO_SYSTEM = 'X') THEN 'Y' ELSE 'Z' END AS FLOW
FROM PART1 A, PART2 B,DATA_REP_CALENDAR CAL
WHERE A.ORDER_SEQ = B.ORDER_SEQ
AND TRUNC(B.LOAD_DATE) = CAL.ACTUAL_CALENDAR_DATE (+)
AND TRUNC(B.LOAD_DATE) BETWEEN ADD_MONTHS( TO_DATE('07/01/2019', 'MM/DD/YYYY'),- 6) and LAST_DAY( TO_DATE('07/01/2019', 'MM/DD/YYYY'))
OR TRUNC(B.LAST_MODIFIED_DATE) BETWEEN ADD_MONTHS( TO_DATE('07/01/2019', 'MM/DD/YYYY'),- 6) and LAST_DAY( TO_DATE('07/01/2019', 'MM/DD/YYYY'))
OR TRUNC(B.ORDER_ITEM_LAST_UPDATED) BETWEEN ADD_MONTHS( TO_DATE('07/01/2019', 'MM/DD/YYYY'),- 6) and LAST_DAY( TO_DATE('07/01/2019', 'MM/DD/YYYY'));
【问题讨论】:
-
只需使用标准
LEFT JOIN重写它 -
@a_horse_with_no_name 你能告诉我如何在我的代码中使用它吗?我对 SQL 很陌生,所以在这里我有点困惑
标签: oracle oracle11g oracle-apex outer-join