循环唯一插入临时表MySql存储过程

时间:2018-06-13 02:56:50

标签: mysql stored-procedures temp-tables

我有两个看起来像这样的表:

Table 1
    Type 1 | Type 2 | Type 3 | ...
       1   |   3    |    0   | ...

Table 2
    Type 1 | Type 2 | Type 3 | ...
       3   |   2    |    1   | ...

我想将它们组合成一个像这样的临时表:

Temporary Table
UID |  Type  | Table
 1  | Type 1 |   1
 2  | Type 2 |   1
 3  | Type 2 |   1
 4  | Type 2 |   1
 7  | Type 1 |   2
 8  | Type 1 |   2
 9  | Type 1 |   2
10  | Type 2 |   2
11  | Type 2 |   2

基本上,表1和表2中的数字是总数,我想将它们分成这个临时表中的各个行。

我开始走下从两个表中选择并将值存储到临时变量的路径。然后我将循环遍历每个变量并插入临时表。但是我每桌大约有15个专栏,必须有一个更简单的方法。我只是不知道它是什么。

有没有人对此有任何见解?我的知识在MySql存储过程上非常有限。

1 个答案:

答案 0 :(得分:1)

不确定一种简单的方法。一种选择是拥有数字表。这是一个快速的方法,在common-table-expression中获得1-10(根据需要进行更改)。

然后,您可以join对每个表格和每种类型使用union all每个子集。这是一个浓缩版本:

with numbers as (select 1 n union all select 2 union all 
   select 3 union all select 4 union all select 5 union all
   select 6 union all select 7 union all select 8 union all
   select 9 union all select 10)
select 'type1' as type, '1' as tab
from numbers n join table1 t on n.n <= t.type1
union all 
select 'type2' as type, '1' as tab
from numbers n join table1 t on n.n <= t.type2
union all
select 'type1' as type, '2' as tab
from numbers n join table2 t on n.n <= t.type1
union all 
select 'type2' as type, '2' as tab
from numbers n join table2 t on n.n <= t.type2