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? Просто витягнути дані прямо з однієї таблиці (в основному це необроблена таблиця даних) і вставити в іншу таблицю (в основному оброблювану таблицю даних)?

Відповіді:


401
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'

1
@InSane: 1) дати відповідь 2) виправити формат запитання. Не пропустіть замовлення наступного разу ;-)
zerkms

ха-ха :-) yup..i мені ніколи не вдалося сортувати мої пріоритети! :-D
Ягмаг

1
Працюючи! +1 Ідеально і дуже швидко! Дякую, друже. Просто довелося зняти дужки з полі SELECT ...
Хтось

@zerkms; Чи спрацьовуватимуть тригери з цим INSERT INTO ... SELECTтвердженням?
хакі

2
@haccks Я вважаю те саме, ніби це просто "нормальний"INSERT
zerkms

30

для цілого ряду

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

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

вставити в xyz (t_id, v_id, f_name) виберіть t_id, v_id, f_name з xyz2, де id = "1";

1
Підхід у цілому ряду виходить з ладу, якщо вже є запис із відповідним первинним ключем
HotN

Ви знайшли якесь рішення? <Підхід у цілому ряду виходить з ладу, якщо вже існує запис із відповідним первинним ключем.>
Shivdhwaj Pandey

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 .


2
Що робити, якщо я хотів би вставити три рядки даних з однаковими значеннями з вибраних, але різних значень для "додаткових" стовпців, доданих, таких як електронна пошта та 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 сек

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.