我在我的数据库中有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'等,但请参阅上述更新。我想我已经发现了这个问题。 –