SQL DB2存储过程基于其他列添加列的排列

时间:2012-09-04 13:19:56

标签: sql database stored-procedures db2 permutation

鉴于以下表格:

tableA:        | tableB:
               |
col1  col2     | col3  col4
-----------    | ----------
1     4        | 1     x
2     5        | 2     x
3     6        | 1     z
               | 2     z
               | 3     z

我想在DB2中编写一个存储过程,在tableB中添加一些行,通过修改col3的值及其来自tableA(1-4,2-5,3-6)的映射,所以这些添加了行:

通过查看col4 = x所在的行,必须在tableB中添加这些行:

               | 4     A1 -> (only 1 changed to its mapping value 4)
               | 2     A1

               | 1     B1   
               | 5     B1 -> (only 2 changed to its mapping value 5)

               | 4     C1 -> (1 changed to its mapping value 4)
               | 5     C1 -> (and 2 changed to its mapping value 5)

并查看col4 = z所在的行,必须在tableB中添加这些行:

               | 4     A2 -> (only 1 changed to its mapping value 4)
               | 2     A2
               | 3     A2

               | 1     B2 
               | 5     B2 -> (only 2 changed to its mapping value 5)
               | 3     B2

               | 1     C2 
               | 2     C2
               | 6     C2 -> (only 3 changed to its mapping value 6)

               | 4     D2 -> (1 changed to its mapping value 4)
               | 5     D2 -> (and 2 changed to its mapping value 5)
               | 3     D2

               | 4     E2 -> (1 changed to its mapping value 4)
               | 2     E2
               | 6     E2 -> (and 3 changed to its mapping value 6)

               | 1     F2 
               | 5     F2 -> (2 changed to its mapping value 5)
               | 6     F2 -> (and 3 changed to its mapping value 6)

               | 4     G2 -> (1 changed to its mapping value 4)
               | 5     G2 -> (and 2 changed to its mapping value 5)
               | 6     G2 -> (and 3 changed to its mapping value 6)

请注意,在我的例子中,我有:

  • 一个2到1的映射(由2行表示:[1,x]和[2,x])所以在tableB中为它添加了3行。
  • 和3到1的映射(由3行表示:[1,z],[2,z]和[3,z]),因此在表B中添加了7行。

如果我在tableB中有4对1的映射(由4行表示),则必须添加15行。
如果我在表B中有5比1的映射(由5行表示),则必须添加31行 等等...

(不要将这些映射与tableA的映射混淆。不同)

1 个答案:

答案 0 :(得分:0)

我很难理解。

我认为最好删除每个子集,然后插入当前映射。 (而不是试图弄清楚增量)

这似乎是不像这样反规范化的一个很好的理由。