0

我正在处理一些关键数据检索报告任务,并发现一些困难继续进行。基本上,它属于医疗领域,整个数据分布在几个表中,我无法更改数据库表设计的架构。为了完成我的报告,我需要以下步骤:

1- divide the whole report to several parts, for each parts retrieve data by using
several joins. (like for part A can be retrieved by this:
select a1.field1, a2.field2 from a1 left join a2 on a1.fieldA= a2.fieldA ) then I can
got all the data from part A.

2- the same things happened for part B
select b1.field1, b2.field2 from b1 left join b2 on b1.fieldB= b2.fieldB, then I also
get all the data from part B.

3- same case for part C, part D.....and so on.

我划分它们的原因是,对于每个部分,我需要有超过 8 个连接(医疗数据总是很复杂),所以我不能在一个连接中完成所有这些(超过 50 个连接,这是不可能完成的。 ..)

之后,我运行我的 Spring Batch 程序,将 A 部分的所有数据和 b、c 部分的数据插入到一个表中,作为我的最终报告表。问题不是每个部分都有相同的行数,这意味着 A 部分可能会返回 10 行,而 B 部分可能会返回 20 行。由于每个部分的时间条件是相同的(1 天)并且无法更改,所以我想知道如何以最小的开销将所有这些不同的数据部分存储到一个表中。我不想有很多重复,感谢您的大力帮助。

4

1 回答 1

0

在我看来,您需要的是连接“来自 A 部分的数据”、“来自 B 部分的数据”和“来自 C 部分的数据”。让我们称它们为 da、db 和 dc。da/b/c 中的 num 行不同是完全可以的。但是,当您尝试将它们全部放在最后的单个表中时,显然它们之间存在某种关系。如果没有更好地描述这种关系,就不可能提供更具体的答案。所以我会写下我的想法,你可能已经知道了,但无论如何......

最简单的方法是将 3 个 [inner] 查询的结果连接到更高级别的 [outer] 查询中。

select j.x, j.y, j.z
from (
   ' da join db join dc
) j;

如果这是不可能的(由于您所说的加入太多),请尝试以下之一:

  1. 创建 3 个单独的物化视图(da、db 和 dc 各一个)并执行这些视图的连接。物化是可选的(即您也可以使用“普通”视图),但如果在您的数据库中可用,它应该会大大提高性能。
  2. 首先对 da/b/c 运行查询,获取数据并将这些数据放入中间表中。在这些表上运行连接。

PS:如果您想对某些数据运行报告(许多/频繁/大型),那么应该适当地设计这些数据,否则您将来会遇到一堆麻烦。

如果您想要更具体的内容,请发布 da/b/c 之间的关系。

于 2012-11-08T16:20:00.203 回答