#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