加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 毗连前提下的Rownum

发布时间:2021-04-01 03:27:10 所属栏目:站长百科 来源:网络整理
导读:最近我修复了一些错误:在毗连前提下有rownum. 这样的工作:在t1.id = t2.id和rownum 2上左毗连t1.因此无论“左毗连”怎样,它都应该只返回一行. 当我进一步研究这个时,我意识到我不大白Oracle如安在“左毗连”前提下评估rownum. 让我们建设两个样本表:主表

最近我修复了一些错误:在毗连前提下有rownum.

这样的工作:在t1.id = t2.id和rownum< 2上左毗连t1.因此无论“左毗连”怎样,它都应该只返回一行. 当我进一步研究这个时,我意识到我不大白Oracle如安在“左毗连”前提下评估rownum.
让我们建设两个样本表:主表和细节表.

create table MASTER
(
  ID   NUMBER not null,NAME VARCHAR2(100)
)
;
alter table MASTER
  add constraint PK_MASTER primary key (ID);

prompt Creating DETAIL...
create table DETAIL
(
  ID            NUMBER not null,REF_MASTER_ID NUMBER,NAME          VARCHAR2(100)
)
;
alter table DETAIL
  add constraint PK_DETAIL primary key (ID);
alter table DETAIL
  add constraint FK_DETAIL_MASTER foreign key (REF_MASTER_ID)
  references MASTER (ID);

prompt Disabling foreign key constraints for DETAIL...
alter table DETAIL disable constraint FK_DETAIL_MASTER;
prompt Loading MASTER...
insert into MASTER (ID,NAME)
values (1,'First');
insert into MASTER (ID,NAME)
values (2,'Second');
commit;
prompt 2 records loaded
prompt Loading DETAIL...
insert into DETAIL (ID,REF_MASTER_ID,1,'REF_FIRST1');
insert into DETAIL (ID,'REF_FIRST2');
insert into DETAIL (ID,NAME)
values (3,'REF_FIRST3');
commit;
prompt 3 records loaded
prompt Enabling foreign key constraints for DETAIL...
alter table DETAIL enable constraint FK_DETAIL_MASTER;
set feedback on
set define on
prompt Done.

然后我们有这个查询:

select * from master t
left join detail d on d.ref_master_id=t.id

功效集是可猜测的:我们拥有主表中的全部行和具体信息表中与此前提匹配的3行d.ref_master_id = t.id.

Result Set

然后我在毗连前提中添加了“rownum = 1”,功效是一样的

select * from master t
left join detail d on d.ref_master_id=t.id and rownum=1

最风趣的是我配置了“rownum< -666”并再次获得了沟通的功效!

select * from master t
left join detail d on d.ref_master_id=t.id and rownum<-666.

因为功效集,我们可以嗣魅这个前提在具体信息表中被评估为3行的“真”.但假如我行使“内部联接”,统统都应该云云.

select * from master t
join detail d on d.ref_master_id=t.id and rownum<-666.

这个查询不返回任何行,由于我无法想象rownum会少于-666

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读