所以我为我的领导团队建立了一个正确的问题,但我不明白为什么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') ))
因此,在最深入的select中,我采用客户订单号为THO40000的序列号,此查询返回2个序列号。
第二个子查询从序列号匹配的历史表中返回我的订单的帐单编号,在本例中,对于此订单,它们都使用相同的帐单编号312000。
最后一个select返回我的总账单金额,它与找到的账单号码相匹配,在我的例子中是$110。
查询可以工作,但我不明白的是,为什么它不是重复的?为什么它每次找到312000都不返回110,给我两条110的记录呢?计费号码是billing_information表中的PK。我不确定为什么没有我在查询帐单号码时使用distinct关键字,它就能工作。
无论如何,谢谢你的帮助,如果你有问题,我会尽我最大的努力去解释!
发布于 2018-05-30 09:18:31
您之所以被保存,是因为您使用IN
来获取要使用的billing_no
值,而不是使用b.billing_no = h.billing_no
在两个表之间使用INNER JOIN
。连接将复制记录,但您的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
条件“更真实”。
https://stackoverflow.com/questions/50594716
复制相似问题