Как объединить несколько значений в столбце с другим столбцом, который также имеет несколько значений, разделенных запятой - PullRequest
0 голосов
/ 26 декабря 2018
column1 | column2 | Result
32,33   | A,B     | A32,A33,B32,B33

Я привел приведенный выше пример, в котором у меня есть два столбца с несколькими значениями, разделенными запятой, и я хочу объединить первые два столбца и хочу получить результат, как показано в столбце Результат.

1 Ответ

0 голосов
/ 25 августа 2019

В MySQL 8.0 вы можете сначала разбить столбцы на основе значений, разделенных запятыми -

 with recursive col1 as (select 1 id, '32,33' as column1
                         union all
                         select 2, '34,35'),
      rec_col1 as (select id, column1 as remain, substring_index( column1, ',', 1 ) as column1
                   from col1
                   union all
                   select id, substring( remain, char_length( column1 )+2 ),substring_index( substring( remain, char_length( column1 ) +2  ), ',', 1 )
                   from rec_col1
                   where char_length( remain ) > char_length( column1 )

РЕЗУЛЬТАТ

id  column1
1   32
1   33
2   34
2   35

Аналогично, Второй столбец-

with recursive col2 as (select 1 id, 'A,B' as column2
                        union all
                        select 2, 'C,D'),
     rec_col2 as (select id, column2 as remain, substring_index( column2, ',', 1 ) as column2
                  from col2
                  union all
                  select id, substring( remain, char_length( column2 )+2 ),substring_index( substring( remain, char_length( column2 ) +2  ), ',', 1 )
                  from rec_col2
                  where char_length( remain ) > char_length( column2 ))
select id, column2 from rec_col2
order by id;

РЕЗУЛЬТАТ

id  column2
1   A
1   B
2   C
2   D

Разделив оба столбца, Вы можете объединить их на основе идентификатора -

select concat(c2.column2, c1.column1) result_rows
from rec_col1 c1
join rec_col2 c2 on c1.id = c2.id

РЕЗУЛЬТАТ

result_rows
A32
B32
C34
D34
A33
B33
C35
D35

Наконец, вы можете использовать GROUP_CONCAT для их объединения -

select group_concat(c2.column2, c1.column1 order by c2.column2, c1.column1) result
from rec_col1 c1
join rec_col2 c2 on c1.id = c2.id 
group by c2.id

РЕЗУЛЬТАТ

result
A32,A33,B32,B33
C34,C35,D34,D35
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...