You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:02:39