#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 . . . Новые вопросы следует задавать в виде вопросов, а не в комментариях.