首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Oracle重复字段,但仍然正确

Oracle重复字段,但仍然正确
EN

Stack Overflow用户
提问于 2018-05-30 08:19:38
回答 1查看 43关注 0票数 0

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

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

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

代码语言:javascript
复制
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') ))

因此,在最深入的select中,我采用客户订单号为THO40000的序列号,此查询返回2个序列号。

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

最后一个select返回我的总账单金额,它与找到的账单号码相匹配,在我的例子中是$110。

查询可以工作,但我不明白的是,为什么它不是重复的?为什么它每次找到312000都不返回110,给我两条110的记录呢?计费号码是billing_information表中的PK。我不确定为什么没有我在查询帐单号码时使用distinct关键字,它就能工作。

无论如何,谢谢你的帮助,如果你有问题,我会尽我最大的努力去解释!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-30 09:18:31

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

代码语言:javascript
复制
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条件“更真实”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50594716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档