所以我为我的领导团队建立了一个正确的查询,但我不明白为什么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关键字的帐单号。
无论如何,感谢您的帮助,如果您有任何疑问,我会尽力解释!
答案 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
条件“更真实”。