Oracle查询含重复Billing No却未返回重复结果的原因咨询
为什么你的Oracle查询没有返回重复记录?
这其实是Oracle处理IN子查询的逻辑加上主键唯一性共同导致的结果,咱们一步步拆解清楚:
核心原因:IN子查询是存在性检查,而非“匹配次数映射”
你的子查询链路最终返回了两次相同的billing_no(312000),但IN关键字的作用是判断主表的billing_no是否存在于子查询的结果集中——哪怕子查询里同一个值出现100次,只要存在,就只会触发一次匹配。
换句话说,你的主查询条件等价于:
where b.billing_no = 312000 OR b.billing_no = 312000
这和直接写where b.billing_no = 312000没有任何区别,自然不会返回重复行。
再加上主键的唯一性
你提到billing_no是billing_information表的主键,这意味着该表中每个billing_no只会对应一条记录。哪怕你的子查询返回N次同一个billing_no,主表也找不到第二条匹配的记录来返回,所以最终结果只会有一行。
如果想得到重复记录该怎么做?
如果希望子查询有多少个匹配行,主查询就返回多少行(比如你想要两条$110的记录),可以把IN换成JOIN关联查询,示例如下:
select b.total_amount_billed as billed from t1.billing_information b inner join t1.res_history h on b.billing_no = h.billing_no inner join t1.res r on h.res_seq_no = r.reservation_seq_no where r.customer_order_no = 'THO40000'
这样只要res表中有2条匹配的记录,关联后就会返回2行结果。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

