Скопируйте только определенные строки из одной таблицы в другую и создайте новую строку для каждой информации о строке

#mysql #sql

#mysql #sql

Вопрос:

Я хочу скопировать только определенные строки из одной таблицы в другую. Пока все так хорошо:

 CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM HDG.HDG_FINAL_TABLE WHERE HDG.HDG_FINAL_TABLE.FARBFAMILIE LIKE "%,%";
UPDATE tmptable_1 SET primarykey = NULL;
INSERT INTO HDG.HDG_FINAL_TABLE_2 SELECT * FROM tmptable_1;
DROP TEMPORARY TABLE IF EXISTS tmptable_1;
  

Моя проблема в том, что столбец «FARBFAMILIE» получил три разных значения, таких как «черный, синий, желтый». Я хочу скопировать каждую строку, где столбец «FARBFAMILIE» содержит «,» и дублировать эту строку так часто, как столбец содержит различную информацию, разделенную на «,».

Исходная строка:

столбец 0 — column1 — column2

Группа — Артикул — Цвет

1 — 001 — черный, синий, желтый

Цель:

столбец 0 — column1 — column2

Группа — Артикул -Цвет

1 — 001 — черный

1 — 001 — синий

1 — 001 — желтый

Спасибо за вашу помощь!

Комментарии:

1. Попробуйте погуглить «Функция разделения MySQL»

Ответ №1:

Похоже, вы хотите совершить благородный поступок, избавившись от столбцов, разделенных запятыми. Это не так просто, но вы можете это сделать. Во-первых, вам нужно знать максимальное количество значений в столбце:

 select 1   max(length(FARBFAMILIE) - length(replace(FARBFAMILIE), ',', ''))
from HDG.HDG_FINAL_TABLE;
  

Обратите внимание на трюк здесь для подсчета элементов. Возьмите длину значения и вычтите длину без запятых.

Затем вы можете получить нужные строки в виде:

 select `group`, sku,
       substring_index(substring_index(color, ',', n.n), ',', -1) as color
from HDG.HDG_FINAL_TABLE join
     (select 1 as n union all select 2 union all select 3 . . .
     ) n
     on length(FARBFAMILIE) - length(replace(FARBFAMILIE), ',', '') <= n.n;
  

Это приведет к созданию выходных строк с отдельным цветом в каждой строке.

Комментарии:

1. Потрясающе! Большое вам спасибо! Сработало хорошо

2. Гордон, последний вопрос: (а) первое значение перед «,» всегда отсутствует (например, «черный»), не знаю почему и (б) я хочу применить код к нескольким столбцам шаг за шагом (15 столбцов), поэтому в случае, если столбец «FARBFAMILIE» содержит 3 цвета или меньше / больше. Как я могу сохранить «(выберите 1 как n объединение всех выберите 2 объединение всех выберите 3)» динамическим?

3. (a) Попробуйте использовать ', ' вместо ',' для индексов подстрок. Возможно, это сбивает с толку. (b) Это помогает, если у вас есть таблица чисел, но есть некоторые хитрости, которые слишком длинны для комментария.

4. спасибо за вашу помощь. (a) Я добавил 3 пробела, 1 в подстроке, 2 в инструкции length. (b) Я только что добавил 12 выборок (максимальная информация в одном столбце равна 12), поэтому у меня много дубликатов, но я избавляюсь от них впоследствии. Тем не менее, у меня есть последний вопрос … 🙂 весь запрос открывает 2 окна, одно с количеством атрибутов, а второе показывает данные. Как я могу сохранить данные в другой таблице? Я знаю, как это сохранить, но mysql говорит «количество столбцов не совпадает», и я думаю, что это из-за окна 1 (количество атрибутов). Я просто хочу сохранить второе окно

5. @user3802349 . . . Новые вопросы следует задавать в виде вопросов, а не в комментариях.