怎样处理几个表之间的关联--过江项羽
有三个表:A,B,C分别有两个字段并且有一个相同的字段。
在A表中字段为ID和NUMBER,其中ID是可重复的。
在B表中字段也为ID和NUMBER,其中ID也是可重复的。B表中的所有ID值都在A表中出现过。
在C表中字段为ID和NAME,ID是唯一的,但ID是一个全集,既在A表中ID可能出现的所有值都在C表的ID中存在
例如:
A表 B表 C表
ID NUMBER ID NUMBER ID NAME
1 10 1 12 1 A1
1 15 1 25 2 A2
1 28 3 16 3 A3
2 20 10 14 4 A4
2 13 5 A5
3 18 6 A6
4 20 7 A7
5 6 8 A8
6 10 9 A9
6 10 10 B1
6 11 11 B2
6 8 12 C1
7 12
8 10
9 11
10 18
10 1
要求:产生一个查询或视图D。
条件是:包括ID ,NAME,NUMBER三个字段,其中NUMBER的值要大于10。并且NUMBER是A表
相同ID的NUMBER的和减去B表相同ID的NUMBER的最大值。如果在A表中存在但B表
中不存在则相当于B表中此ID的NUMBER的值为0。如果在C表中存在但A表中不存在
则NUMBER可记0。
上例中最后结果应该是:
ID NAME NUMBER
1 A1 28---------------(10+15+28-25=28)
2 A2 33---------------( 20+13- 0=33)
3 A3 2---------------( 18-16= 2)----应剔除
4 A4 20---------------( 20-0=20)
5 A5 6---------------( 6-0=28)----应剔除
6 A6 39--------------(10+10+11+8-0=39)
7 A7 12---------------( 12-0=12)
8 A8 10---------------( 10-0=10)
9 A9 11---------------( 11-0=11)
10 B1 4---------------( 18-14=4)----应剔除
11 B2 0---------------( 0-0=0)----应剔除
12 C1 0---------------( 0-0=0)----应剔除
所以最后返回的结果为:
ID NAME NUMBER
1 A1 28---------------(10+15+28-25=28)
2 A2 33---------------( 20+13- 0=33)
4 A4 20---------------( 20-0=20)
6 A6 39--------------(10+10+11+8-0=39)
7 A7 12---------------( 12-0=12)
8 A8 10---------------( 10-0=10)
9 A9 11---------------( 11-0=11)
三个表中任何一个表中的数量都非常大,A表有1300多万记录,B表有15万多记录,C表有10万多记录
希望找到好一点的方法解决此问题,行营的检索速度能快一些。
数据库使用的是ORACLE8I。各位大虾多多帮忙。