【发布时间】:2012-06-11 20:02:44
【问题描述】:
我的数据库中有 3 个表。
- 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 值?
-
所有日期都类似于“10/07/2011”、“03/07/2012”等。但请参阅上面的更新。我想我已经发现了这个问题。
标签: sql oracle date join subquery