2016-08-17 2 views
-2

Мне нужно прочитать данные из одной таблицы и вставить в несколько строк в другую таблицу в базе данных MySQL.SQL Query для INSERT нескольких строк с SELECT

Таблица 1 выглядит:

ID, name, e-mail, phone, city, ..., .... 

В таблице 2 мне нужно вставить данные, такие как:

(row1) ID, "name", name 
    (row2) ID, "e-mail, e-mail 
    (row3) ID, "phone", phone 
    ... 
    ... 

Таблица 1 имеет около 3000 строк

Я предполагаю, что я нужно использовать какой-то foreach или do..while, но не может найти ничего, что работает. Может ли кто-нибудь дать мне понять, как это сделать?

+0

Может показать вашу попытку ?? – Rupsingh

+0

Я попробовал что-то вроде этого: INSERT INTO table2 ЦЕННОСТИ (ID, 'имя', имя), ЦЕННОСТИ (ID, 'e-mail', e-mail), ЦЕННОСТИ (ID, 'phone', phone) SELECT * FROM table1; И получил, что есть недопустимый оператор SQL ... – JErne

ответ

3

Если я правильно понял ваш вопрос, вы хотите сделать запрос в таблице1, который возвращает несколько строк, а затем вставить их в таблицу2 в один цикл. Это INSERT INTO SELECT заявление:

INSERT INTO table2 
    (name, email, phone) 
    SELECT name, email, phone 
    FROM table1; 

Он может быть изменен, чтобы захватить конкретные результаты, а также:

INSERT INTO table2 
    (name, email, phone) 
    SELECT name, email, phone 
    FROM table1 
    WHERE name = 'target person'; 

Более подробную информацию можно найти на сайте http://dev.mysql.com/doc/refman/5.7/en/insert-select.html и http://www.w3schools.com/sql/sql_insert_into_select.asp.

EDIT:

Основываясь на ваш комментарий, это звучит, как вы пытаетесь сделать это: SQL split values to multiple rows.

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

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

+0

Не совсем, я хочу, чтобы результат каждой возвращенной строки в таблице 1 преобразовывался в несколько строк в таблице 2, где каждая строка содержит подмножество результата из таблицы 1. – JErne

+0

Спасибо за отзыв! Теперь я лучше понимаю вашу задачу и соответствующим образом обновил свой ответ. Надеюсь, теперь это станет более полезным :) –

+0

Спасибо! Это похоже на рабочее решение! Причина, по которой мне нужно сделать это, - это то, что у меня есть веб-сайт, на котором мы переходим на Wordpress. На старом сайте у нас были все пользователи, как в Таблице 1, но Wordpress с надстройками, которые нам нужно использовать, имеет большую часть информации о пользователе как i Table2. Я не смог найти инструмент миграции, чтобы помочь мне, поэтому мне нужно сделать это в базе данных. – JErne

0

Просто обновление о том, как я это сделал. Поскольку у меня нет полного доступа к серверу базы данных, я могу просто добавить/удалить данные и создать новые таблицы, не удалось создать функцию, как предложено в ссылке, приведенной в ответе. Вместо того, чтобы пытаться прокручивать данные, я сделал INSERT для каждой новой строки, например: INSERT INTO table2 (id, col2, col3) SELECT id, 'name', name FROM table1; INSERT INTO table2 (id, col2, col3) SELECT id, 'email', email FROM table1;

Еще раз спасибо за предоставленную помощь.

 Смежные вопросы

  • Нет связанных вопросов^_^