在一个唯一的表

时间:2016-12-07 16:00:10

标签: sql oracle algorithm merge match

我有5张桌子。 每个表都包含一个键和列,用于指示键是否重复以及组键 告诉我们密钥是否属于同一个组。 例如,

    表A中的
  • :1和5是重复的,因为它们对于字段p(= 1)具有相同的值,并且它们与相同的组(= 1)相同。
  • 表B中的
  • :5和4是重复的,因为它们对于字段p(= 1)具有相同的值,并且它们属于同一组(= 1)。

这也意味着1,4和5是相同的,因为5与1和4重复。

最后,我想将重复的那个分组。 输出应如下所示: 键,P,组

1,999,1
5,999,1
4,999,1
8,999,1
78,999,1

上面的行具有相同的p(999),因为它们都是链接的(表A中的相同组和1和5,表B中的5和4,表D中的4和8,表E中的5和78)

90,777,1
91,777,1

上面的行具有相同的p(777),因为它们在表E中链接。即使它们在同一组(1)中, 我无法链接它们,因为它们与另一个键没有链接。

10,666,1
15,666,1
21,555,1

上面的行有不同的p。

79,222,2
80,222,2

相同的p因为在表A和同一组(2)中链接

81,888,3
82,888,3

相同的p因为在表A中链接并且来自同一组(3)

85,111,4

关键是一个人。

我正在寻找一种方法在sql中执行(通过先前连接不起作用,某些链接丢失)或算法。

以下示例:

表A

key,p,group
1,1,1
5,1,1
4,2,1
8,3,1
10,4,1
15,5,1
21,6,1
78,7,1
79,8,2
80,8,2
81,9,3
82,9,3
85,10,4
90,11,1
91,12,1

表B

key,p,group
1,1,1
5,3,1
4,3,1
8,4,1
10,5,1
15,6,1
21,7,1
78,8,1
79,9,2
80,10,2
81,11,3
82,12,3
85,13,4
90,14,1
91,15,1

表C

key,p,group
1,1,1
5,2,1
4,3,1
8,4,1
10,5,1
15,5,1
21,6,1
78,7,1
79,8,2
80,9,2
81,10,3
82,11,3
85,12,4
90,13,1
91,14,1

表D

key,p,group
1,1,1
5,2,1
4,3,1
8,3,1
10,5,1
15,6,1
21,7,1
78,8,1
79,9,2
80,10,2
81,11,3
82,12,3
85,13,4
90,14,1
91,15,1

表E

key,p,group
1,1,1
5,2,1
4,3,1
8,4,1
10,5,1
15,6,1
21,7,1
78,2,1
79,8,2
80,9,2
81,10,3
82,11,3
85,12,4
90,13,1
91,13,1

0 个答案:

没有答案