我在我的數據庫中有3個表。JOIN Breaking WHERE子句子查詢
- PARENT_A有一個「ID」主鍵列。
- PARENT_B具有 「ID」 主鍵列。
- CHILD有 「PARENT_A_ID」 和 「PARENT_B_ID」 外鍵列。它還有一個「START_DATE」列,這是一個VARCHAR(遺憾的是,我不能改變這個)。
現在,我有以下查詢。
更新 - 我更新了子查詢有點像我的實際代碼。對c2有一個額外的限制,保證START_DATE是有效的日期。
SELECT *
FROM PARENT_B pb
LEFT OUTER JOIN CHILD c1 ON c1.PARENT_B_ID = pb.ID
WHERE pb.ID IN
(
SELECT c2.PARENT_B_ID
FROM PARENT_A pa
LEFT OUTER JOIN CHILD c2 ON c2.PARENT_A_ID = pa.ID
WHERE TO_DATE(c2.START_DATE, 'mm/dd/yyyy') BETWEEN
ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), -12) AND
(TRUNC(SYSDATE, 'MONTH') - 1)
AND c2.HAS_VALID_DATE = 1
);
該查詢失敗。我得到一個ORA-01843: not a valid month
異常。但是,如果我刪除第一個連接(查詢的第3行),查詢運行良好。
我不知道發生了什麼事。子查詢本身運行良好,所有值都是正確的日期格式。
沒有人有任何想法是怎麼回事?
您可以加入一些示例CHILD.START_DATE值? – Andomar
所有的日期都像'10/07/2011','03/07/2012'等,但請參閱上述更新。我想我已經發現了這個問題。 –