Oracle Netezza中的子查询
我正在尝试将一个SQL从Oracle11g移植到Netezza 以下是我在Oracle中的查询:Oracle Netezza中的子查询,oracle,netezza,Oracle,Netezza,我正在尝试将一个SQL从Oracle11g移植到Netezza 以下是我在Oracle中的查询: SELECT ID, TEACHERID, CLASS, SECTION, MAJOR, SUPERVISOR, COURSE, SCORE, SCOREDATE, (select SCORE from STUDENT_SCORES d2 where d2.ID=d1.ID and d2.SCOREDATE (d1.SCOREDATE)-28 and d1.COURSE=d2.CO
SELECT
ID, TEACHERID, CLASS, SECTION, MAJOR, SUPERVISOR, COURSE, SCORE, SCOREDATE,
(select SCORE from STUDENT_SCORES d2 where d2.ID=d1.ID and d2.SCOREDATE (d1.SCOREDATE)-28 and d1.COURSE=d2.COURSE) as PRIORSCORE,
(d1.SCOREDATE)-28 as PRIORSCOREDT,
REMCD
FROM
STUDENT_SCORES d1
WHERE
TEACHERID='T1' AND SCOREDATE=(SELECT MAX(SCOREDATE) FROM STUDENT_SCORES WHERE TEACHERID='T1')
在Netezza中运行此命令时,我收到一个错误:
ERROR: (2) This form of correlated query is not supported - consider rewriting
如何为Netezza重写此查询?请帮助。根据Netezza
- 不能在集合操作中使用相关子查询(
、UNION
、INTERSECT
和EXCEPT
)减号
- 不能将相关子查询与
和GROUP BY
子句的聚合一起使用具有
- 当表达式时,不能在or子句或
/大小写
中使用相关子查询
- 不能在列表中的
中使用相关子查询
- 您不能在
列表中使用相关子查询。SELECT
我建议您将代码改写为:
select d1.ID, d1.TEACHERID, d1.CLASS, d1.SECTION, d1.MAJOR, d1.SUPERVISOR, d1.COURSE, d1.SCORE, d1.SCOREDATE
,d2.SCORE as PRIORSCORE
,d2.SCOREDATE as PRIORSCOREDT
,d1.REMCD
from STUDENT_SCORES d1 left outer join
(select * from STUDENT_SCORES ss where ss.SCOREDATE = (SELECT MAX(SCOREDATE)-28 FROM STUDENT_SCORES WHERE TEACHERID='T1') d2
on d1.ID=d2.ID
and d1.COURSE=d2.COURSE
where d1.TEACHERID='T1'
and d1.SCOREDATE = (SELECT MAX(SCOREDATE) FROM STUDENT_SCORES WHERE TEACHERID='T1')
您确定
select
子句(PRIORSCORE
)中的子查询没有返回多行吗?请查找您的答案。您不能在SELECT
列表中使用相关子查询。Maheswaran Ravishankar是的,我知道我不能使用相关子查询,但我如何为Netezza重写它?您的问题在这里得到了回答,还是仍然有问题?
select d1.ID, d1.TEACHERID, d1.CLASS, d1.SECTION, d1.MAJOR, d1.SUPERVISOR, d1.COURSE, d1.SCORE, d1.SCOREDATE
,d2.SCORE as PRIORSCORE
,d2.SCOREDATE as PRIORSCOREDT
,d1.REMCD
from STUDENT_SCORES d1 left outer join
(select * from STUDENT_SCORES ss where ss.SCOREDATE = (SELECT MAX(SCOREDATE)-28 FROM STUDENT_SCORES WHERE TEACHERID='T1') d2
on d1.ID=d2.ID
and d1.COURSE=d2.COURSE
where d1.TEACHERID='T1'
and d1.SCOREDATE = (SELECT MAX(SCOREDATE) FROM STUDENT_SCORES WHERE TEACHERID='T1')