来自多个表的oracle数据

时间:2011-11-09 21:39:07

标签: sql oracle olap

*的 更新

我将再次尝试解释这种情况: 我有一个datamart,其中包含所有客户和原始付款以及yyyymmdd格式的状态和会计期间。状态需要与另一个表中的状态匹配,以便我只获得status_datamart = status_table和status_table in('inactive','active')的客户名称和会计期间。此数据现在插入名为“inv”的表中,该表包含: PORTFOLIO_INV,CLIENT_INV,ACCT_TYPE_INV,PERIOD,DESK,STATUS,PRIOR_OCA_CALC,PRINCIPAL,CUR_BAL

第二个数据集市再次包含客户端,财务周期,付款(总额和净额),transaction_type。 一个查询用于仅从此数据集中获取那些txn类型与另一个表匹配且txn类别为“粗略”的记录。 第二个查询具有与上述相同的过滤器,现在只有txn类别更改为“net”。

2次查询获得毛重和净值的原因是数据采用以下格式:

client1 |财政期间|状态|毛 client2 |财政期间|状态|毛 client1 |财政期间|状态|净 client3 |财政期间|状态|毛

所以我使用查询一来将总计存储到一个表'pmt': PORTFOLIO_PMT,CLIENT_PMT,ACCT_TYPE_PMT,PERIOD_PMT,DETAIL_TRANSACTION_TYPE,DETAIL_DESK_AT_PMT,DETAIL_STATUS_AT_PMT,PRIOR_OCA_CALC_PMT,DETAIL_AMOUNT_PMT

和第二个查询存储到另一个表'net': PORTFOLIO_NET,CLIENT_NET,ACCT_TYPE_NET,PERIOD_NET,DETAIL_TRANSACTION_TYPE_NET,DETAIL_DESK_AT_PMT_NET,DETAIL_STATUS_AT_NET,PRIOR_OCA_CALC_NET,DETAIL_AMOUNT_NET

约束: client_inv = client_pmt = client_net period = period_pmt = period = net

希望它有所帮助...


我正在编写一个查询,它将从表T1中检索客户名称,会计年度和本金金额,从另一个表T2(对于同一客户和同一会计期间)检索总和(当前付款)以及总和(净)来自第三个表(与T1和T2中的同一客户端)。查询花了2132.78秒来完成T1中的3400条记录,T2中的939条记录以及T3中的103条记录。

有哪种方法我不能使用连接并只是快速获取我想要的数据? 每张表中的记录总数会有所不同,具体取决于本金金额和已收到的付款金额。

2 个答案:

答案 0 :(得分:0)

您是否尝试过分析查询速度慢的原因?

看起来你不必使用连接,而是使用所有三个查询的联合。它看起来像独立的功能。

当你有一个名为contact的表和另一个名为contact_address的表时,你需要使用连接,其中有与主表相关的信息。

如果您的信息不相关,那么您可以通过结合获得结果,其中结果的结构是相同的。

答案 1 :(得分:0)

对于您建议的数据量,

2132秒似乎表明连接条件可能不准确,并且您可能在执行计划中看到了MERGE JOIN CARTESIAN。 如果您要跟踪您的请求并发布tkprof输出或只是解释SQL并发布计划,那么它将有助于诊断问题。