Зацикливание уникальной вставки во временную таблицу хранимой процедуры MySql - PullRequest
0 голосов
/ 13 июня 2018

У меня есть две таблицы, которые выглядят следующим образом:

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 голосов
/ 13 июня 2018

Не уверен в простом способе сделать это.Одним из вариантов будет иметь таблицу чисел.Вот быстрый подход к получению 1-10 в common-table-expression (изменить при необходимости).

Тогда вы можете 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
...