Объединение столбцов для создания новых записей — запрос mysql

#mysql #join #merge #multiple-columns

Вопрос:

У меня есть база данных mysql, и мне нужно объединить два столбца вместе, однако мне нужно объединить столбцы таким образом, чтобы они были не просто объединены вместе, а вместо этого создали совершенно новую отдельную запись.

Пример:

 Before Merge:
name    Computer-one     Computer-two
jack       hp                  dell

<insert unkown sql statement (what I need)>

After Merge
name    Computer-one
jack       hp               
jack       dell

 

Когда я пытаюсь объединить два столбца, они просто сливаются в один столбец, но вместо этого не повторяют запись (смотрите выше).:

 name    Computer-one     
jack       hpdell
 

В настоящее время я использую это concat утверждение. Это единственный способ, которым я смог объединить элементы. Эти столбцы могут содержать нулевые значения, существует идентификатор, который автоматически увеличивается для первичного ключа.

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

1. Как вы хотите идентифицировать «джека»? Является ли это динамическим или параметром, который вы хотите передать в свой запрос? Решение, которое вам нужно,-это запросить компьютер-один отдельно, выполнить объединение с компьютером-две записи firall, принадлежащие имени

2. @Julius A в этой базе данных может быть несколько разных имен, поэтому, вероятно, она динамична. Для записи создание новой таблицы и объединение их подобным образом также является приемлемым ответом.

Ответ №1:

Проблема в том, что вы на самом деле не хотите их объединять. Вы хотите создать новые строки для поля.

Ты можешь просто сделать это.

 INSERT INTO table_name(name, Computer-one)
SELECT 
   name, Computer-two
FROM 
   table_name;
 

Затем вы создадите новые строки для всех строк, в которых есть компьютер-два значения, помещенные в поле Компьютер-один.
Когда вы увидите, что в вашей таблице в два раза больше строк, а поле «Компьютер-один» правильное, вы можете просто удалить столбец «Компьютер-два», и данные будут такими, как вы хотели.

Всегда сначала делайте резервную копию или пробуйте тестовые таблицы, чтобы знать, что все работает в первую очередь.

Ответ №2:

Я думаю, вам просто нужно ОБЪЕДИНИТЬ ВСЕ заявления. Вы можете попробовать ниже —

 SELECT name, "Computer-one"
  FROM YOUR_TABLE
 WHERE "Computer-one" IS NOT NULL
 UNION ALL
SELECT name, "Computer-two"
  FROM YOUR_TABLE
 WHERE "Computer-two" IS NOT NULL;
 

Ответ №3:

Поэтому вам нужно выполнить два запроса к этой таблице и объединить результат. Вставьте результаты в временную таблицу. Затем выберите отдельные записи для каждой записи в столбце «nane».

 SELECT INTO table2(name, model)
SELECT A.name, A.computer-one AS model from table as A
UNION
SELECT B.name, B.computer-two AS model from table as B