【发布时间】:2018-11-12 15:09:35
【问题描述】:
我在嵌套查询中遇到错误。我试图通过给它一个别名并在子查询中调用它来从父查询中选择 id。如何从 mytable 外部查询中获取 id?
SELECT * FROM mytable t
WHERE (
SELECT count(*) number_of_weekdays FROM
(
SELECT start_date, to_char(start_date+(level-1), 'fmday') d_day
FROM ( select strt_dt as start_date , trunc(sysdate) as end_date from mytable where id = t.id )
connect by level <= end_date - start_date + 2
)
WHERE d_day IN (
select rtrim(ltrim(regexp_substr(intv,'[^,]+', 1, level))) from ( select intv from mytable where id = t.id )
connect by regexp_substr(intv, '[^,]+', 1, level) is not null
)
) <= col1
我主要关注的栏目:
INTV | STRT_DT
--------------------------------------------------
3, monday, tuesday, thursday, sunday | 07-MAY-18
错误:
ORA-00904: "T"."ID": invalid identifier
00904. 00000 - "%s: invalid identifier"
【问题讨论】:
-
mytable的CREATE TABLE声明是什么? -
CREATE TABLE mytable (ID NUMBER NOT NULL PRIMARY KEY, CRTD_AT TIMESTAMP(6) NOT NULL, UPDT_AT TIMESTAMP(6) NOT NULL, STRT_DT DATE NOT NULL, END_DT DATE, INTV VARCHAR2(150), COL1 NUMBER(20) , RRNC_PATT VARCHAR2(20) );
-
样本数据和期望的结果真的很有帮助。
-
@GordonLinoff 我更新了示例数据
-
根据 SQL 标准,应该支持比“外部”查询低一级的子查询的相关性。但是,Oracle 历史上并不支持它,并且 12.1 和 12.2 的文档仍然说它是被禁止的。但是,它在 10.1 和 11.1 中确实有效,但在 10.2 和 11.2 中这是“固定的”(意味着它会引发错误)。尽管文档仍然说它不受支持,但它确实在 12.1 和 12.2 中工作。所以,这取决于您的 Oracle 版本!