oracle – 连接条件下的Rownum
发布时间:2021-04-01 20:21:44 所属栏目:站长百科 来源:网络整理
导读:最近我修复了一些错误:在连接条件下有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 (编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐