我正在创建一个视图,您无法创建一个列外部连接到子查询的视图,所以我找到了另一种方法来做到这一点,但现在我遇到了一个字段超出范围的问题。
create table registered (
crn number,
term varchar2(6));
create table course(
crn number,
term varchar2(6),
term_descrip varchar2(25));
insert into registered values (123,'202101');
insert into registered values (456,'202001');
insert into registered values (789,'202101');
insert into registered values (123,'202001');
insert into registered values (456,'201905');
insert into registered values (789,'202101');
insert into registered values (246,'202101');
insert into course values (123,'202001','Anatomy');
insert into course values (123,'202101','Physics');
insert into course values (456,'200001','English');
insert into course values (456,'201901','Algebra');
insert into course values (789,'199901','Gym');
原始查询
select r.crn,r.term, c.term_descrip from registered r
left join course c on c.crn =r.crn and c.term =
(select max(c1.term) from course c1 where c.crn = c1.crn and
c1.term <= r.term);
结果
克恩 | 学期 | 描述 |
---|---|---|
123 | 202101 | 物理 |
456 | 202001 | 代数 |
789 | 202101 | 健身房 |
123 | 202001 | 解剖学 |
456 | 201905 | 代数 |
789 | 202101 | 健身房 |
246 | 202101 | 空值 |
新查询
select r.crn,r.term, max_term.term_descrip from registered r
left join (select * from course c where
c.term = (select max(c1.term) from course c1
where c.crn = c1.crn and c1.term <= r.term)) max_term
on max_term.crn = r.crn
r.term 获取无效标识符,因为它超出范围,我该如何重写以使其进入范围?非常感谢任何建议
如果您对的每个组合只有一排crn
,并term
在course
表中,那么你可以考虑横向连接:
select r.crn, r.term, c.term_descrip from registered r outer apply( select * from course c where c.crn = r.crn and c.term <= r.term order by c.term desc fetch first 1 rows only ) c
CRN | 期限 | TERM_DESCRIP --: | :----- | :------------ 123 | 202101 | 物理学 456 | 202001 | 代数 789 | 202101 | 健身房 123 | 202001 | 解剖学 456 | 201905 | 代数 789 | 202101 | 健身房 246 | 202101 | 空值
db<>在这里摆弄
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句