Сплит значения и l oop через них - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть две таблицы: Table1:

id | value
1  | val1
2  | val2
3  | val3

Table2:

id | value
1  | val1,val2,val22
2  | val2
3  | val3,val15,

Я хочу разделить значения из Table2 запятой (чтобы разделить их) значения), затем l oop через него и найти их в таблице1. В результате мне нужны Table1.id и Table2.id, которые содержат значение из Table1, чтобы вставить их в новую таблицу.

Можно ли сделать это в mysql, так как нет функции SPLIT?

Редактировать: MySql версия 5.7.27

Редактировать2: Желаемый результат:

table1.id  table1.valie  table1.id  table1.valie
        1          val1          1  val1,val2,val22
        2          val2          1  val1,val2,val22
        2          val2          2  val2
        3          val3          3  val3,val15,

Ответы [ 3 ]

1 голос
/ 20 февраля 2020

MySql версия 5.7.27

Использование (при условии, что table2.value содержит не более 10 отдельных значений)

CREATE TABLE table3
/* or INSERT INTO table3 (value) if this table already exists */
SELECT *
FROM ( SELECT value
       FROM table1 
     UNION
       SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(table2.value, ',', numbers.num), ',', -1)) value
       FROM table2,
            ( SELECT 1 num UNION 
              SELECT 2 UNION 
              SELECT 3 UNION 
              SELECT 4 UNION 
              SELECT 5 UNION 
              SELECT 6 UNION
              SELECT 7 UNION
              SELECT 8 UNION
              SELECT 9 UNION
              SELECT 10 ) numbers
       WHERE numbers.num <= LENGTH(table2.value) - LENGTH(REPLACE(table2.value, ',', '')) + 1
       HAVING value != '') total;

fiddle

1 голос
/ 20 февраля 2020
CREATE TABLE table3
SELECT t1.id `t1.id`, t1.value `t1.value`, t2.id `t2.id`, t2.value `t2.value`
FROM table1 t1
JOIN table2 t2 ON FIND_IN_SET(t1.value, t2.value);

скрипка

0 голосов
/ 20 февраля 2020

Может быть, это вам поможет.

Замена PATINDEX () в MYSQL

После получения строк, разбитых на индексы, по значениям индекса. Ваши данные станут похожими ниже

Table2:
id | value
1  | val1
1  | val2
1  | valu22
2  | val2
3  | val3
3  | val15

тогда вы можете сделать что-то вроде:

select * from table2 where value in (select value from table1) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...