设为首页 - 加入收藏 华夏网 ()- 云主机,资讯,互联网,人工智能,云计算,大赢家论坛,区块链,VR,站长网!
热搜: 系统 芯片 什么 市场
当前位置: 主页 > 白小姐论坛 > 正文

oracle – 连接条件下的Rownum

发布时间:2021-04-01 20:45 所属栏目:[白小姐论坛] 来源:网络整理
导读:最近我修复了一些错误:在连接条件下有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

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章