mysql :: вставить в таблицу данные из другой таблицы?

187

Мне было интересно, если есть способ сделать это чисто в SQL:

q1 = SELECT campaign_id, from_number, received_msg, date_received 
     FROM `received_txts` WHERE `campaign_id` = '8';
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)    
    VALUES(q1.campaign_id, q1.from_number, q1.received_msg, q1.date_received);

Примечание: q1 вернет около 30 тыс. Строк.

Есть ли способ сделать то, что я пытаюсь выше в прямой SQL? Чтобы просто извлечь данные прямо из одной таблицы (в основном таблицы необработанных данных) и вставить в другую таблицу (в основном таблицы обработанных данных)?

Hailwood
источник

Ответы:

402
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)  
SELECT campaign_id, from_number, received_msg, date_received
  FROM `received_txts`
 WHERE `campaign_id` = '8'
zerkms
источник
1
@ InSane: 1) дать ответ 2) исправить форматирование вопроса. Не пропустите заказ в следующий раз ;-)
zerkms
ха ха :-) да .. мне никогда не удавалось расставить приоритеты! :-D
Джагмаг
1
Работает! +1 Отлично и очень быстро! Спасибо друг. Просто пришлось убрать скобки из полей SELECT ...
Кто-то
@zerkms; Будут ли триггеры работать с этим INSERT INTO ... SELECTутверждением?
Хак
2
@ haccks Я верю так же, как если бы это был просто "нормальный"INSERT
zerkms
30

для всего ряда

вставить в xyz select * from xyz2, где id = "1";

для выбранного столбца

вставить в xyz (t_id, v_id, f_name), выбрать t_id, v_id, f_name из xyz2, где id = "1";
Локеш Дешмукх
источник
1
Подход со всей строкой завершается неудачей, если уже существует существующая запись с соответствующим первичным ключом.
HotN
Вы нашли какое-нибудь решение? <Подход со всей строкой завершается неудачей, если уже существует существующая запись с соответствующим первичным ключом.>
Шивдхвадж Пандей
10

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

INSERT INTO action_2_members (`campaign_id`, `mobile`, `email`, `vote`, `vote_date`, `current_time`)
SELECT `campaign_id`, `from_number`, 'example@domain.xyz', `received_msg`, `date_received`, 1502309889 FROM `received_txts` WHERE `campaign_id` = '8'

В приведенном выше запросе есть 2 дополнительных столбца с именем email & current_time .

IamMHussain
источник
2
Что если я хочу вставить три строки данных с одинаковыми значениями из выбранных, но разными значениями для добавленных «дополнительных» столбцов, таких как email и current_time?
xxstevenxo
4
INSERT INTO Table1 SELECT * FROM Table2
Мгер Арш
источник
Это очень низкое качество ответа. Кроме того, в отличие от принятого ответа, он даже не пытается относиться к информации, включенной в вопрос.
Майк
0
INSERT INTO preliminary_image (style_id,pre_image_status,file_extension,reviewer_id,
uploader_id,is_deleted,last_updated) 

SELECT '4827499',pre_image_status,file_extension,reviewer_id,
uploader_id,'0',last_updated FROM preliminary_image WHERE style_id=4827488

Анализ

Мы можем использовать запрос выше, если мы хотим скопировать данные из одной таблицы в другую в MySQL

  1. Здесь исходная и целевая таблицы одинаковы, мы также можем использовать разные таблицы.
  2. Несколько столбцов мы не копируем как style_id и is_deleted поэтому мы выбрали их жестко закодированные из другой таблицы
  3. Таблица, которую мы использовали в источнике, также содержит поле автоинкремента, поэтому мы оставили этот столбец, и он автоматически вставляется при выполнении запроса.

Результаты выполнения

1 выполненных запросов, 1 успешный, 0 ошибок, 0 предупреждений

Запрос: вставьте в предварительный_изображение (style_id, pre_image_status, file_extension, reviewer_id, uploader_id, is_deleted, last_updated) выберите ...

5 строк затронут

Время выполнения: 0,385 с Время передачи: 0 с Общее время: 0,386 с

Амит Джайн
источник