Oracle重复字段但仍然正确

时间:2018-05-30 00:19:38

标签: 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美元。

查询有效,但我不明白为什么它不重复?为什么它不返回110,每次发现312000,给我2个记录110?帐单号码是billing_information表中的PK。我不知道为什么它没有使用查询中的distinct关键字的帐单号。

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

1 个答案:

答案 0 :(得分:1)

您正在保存,因为您使用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条件“更真实”。