我有两个看起来像这样的表:
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存储过程上非常有限。
答案 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