oracle - 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 关键字。
无论如何感谢您的帮助,如果您有任何问题,我会尽力解释!
解决方案
您之所以被保存,是因为您曾经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
条件“更真实”。
推荐阅读
- python - Python 网络线程
- excel - Excel VBA 宏 OLEObjects.add 问题
- php - Laravel 参数太少而无法运行
- c# - Dapper QueryMultiple 从数据库中获取实际值
- android - Android模拟器在ubuntu中没有声音
- laravel - 如何使用相关模型操作 Laravel 集合并返回自定义实例?
- swift - 如何构造 5x5 矩阵以在 Swift 中应用为颜色矩阵?
- java - 如何解决在四个随机生成的数字中找到最小数字时偶尔出现的错误答案
- python - 最适合这个问题的机器学习算法?
- c# - Xamarin.Forms 中的死锁