首页 > 解决方案 > Oracle 重复字段但仍然正确

问题描述

所以我为我的领导团队建立了一个正确的查询,但我不明白为什么 oracle 给了我正确的答案。

我有 3 个表,我需要从中获取数据才能获得总账单金额。

这是我的查询(请原谅我,我的第二篇文章,我不确定如何正确格式化我的查询)

select b.total_amount_billed as billed from t1.billing_information b 
where b.billing_no in 
(select h.billing_no 
 from t1.res_history h where h.res_seq_no in 
(Select r.reservation_seq_no 
 from t1.res r where r.customer_order_no in ('THO40000') ))

所以在最深的选择中,我采用我的客户订单号为 THO40000 的序列号,此查询返回 2 个序列号。

第二个子查询从序列号匹配的历史表中返回我的订单的帐单编号,在这种情况下,对于此订单,它们都使用相同的帐单编号 312000。

最后的选择返回与我找到的帐单号码匹配的总帐单金额,在我的情况下为 110 美元。

查询有效,但我不明白为什么它没有重复?为什么每次找到 312000 时它不返回 110,给我 110 的 2 条记录?billing number 是 billing_information 表中的一个 PK。我不知道为什么没有我在查询账单号码时使用 distinct 关键字。

无论如何感谢您的帮助,如果您有任何问题,我会尽力解释!

标签: oracle

解决方案


您之所以被保存,是因为您曾经IN获取billing_no要使用的值,而不是INNER JOIN在两个表之间使用b.billing_no = h.billing_no. 连接会重复记录,但您的IN查询本质上是这样的:

select b.total_amount_billed as billed
from t1.billing_information b 
where b.billing_no in (312000, 312000);

billing_information如果有一行billing_no等于 312000,则它在列表中,因此WHERE条件为真并包含在结果中。它在列表中两次的事实并没有使IN条件“更真实”。


推荐阅读