2010-11-22 29 views
147

me preguntaba si hay una manera de hacerlo puramente en SQL:mysql :: insertar en la tabla, datos de otra tabla?

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); 

Nota: Q1 volvería sobre 30k filas.

¿Hay alguna manera de hacer lo que estoy intentando arriba en sql recto? Para simplemente extraer los datos directamente de una tabla (básicamente una tabla de datos brutos) e insertarlos en otra tabla (básicamente una tabla de datos procesada)?

Respuesta

307
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' 
+0

Perfecto :) Estaba cerca ... ish. Aceptará la respuesta lo antes posible – Hailwood

+1

+1 solo obtuvo unos pocos segundos importantes :-) – InSane

+1

@InSane: 1) dar una respuesta 2) corregir el formato de la pregunta. No te pierdas el orden la próxima vez ;-) – zerkms

19

para la fila entera

insert into xyz select * from xyz2 where id="1";

para la columna seleccionada

insert into xyz(t_id,v_id,f_name) select t_id,v_id,f_name from xyz2 where id="1";
+0

El enfoque de la fila completa falla si ya hay un registro existente con una clave primaria coincidente. – HotN

-1

Puede hacerlo así como a continuación:

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' 
+6

¿No es exactamente lo que zerkms escribió hace 5 años (aparte del 'alrededor de los nombres de la columna y la tabla)? – user276648

1
INSERT INTO Table1 SELECT * FROM Table2 
5

Respondido por zerkms es el método correcto. Pero, si alguien que busca insertar la columna más extra en la tabla a continuación, se puede obtener de la siguiente:

INSERT INTO action_2_members (`campaign_id`, `mobile`, `email`, `vote`, `vote_date`, `current_time`) 
SELECT `campaign_id`, `from_number`, '[email protected]', `received_msg`, `date_received`, 1502309889 FROM `received_txts` WHERE `campaign_id` = '8' 

En la consulta anterior, hay 2 columnas adicionales nombrados correo electrónico & tiempo_actual.

+1

¿Qué sucede si quiero insertar tres filas de datos con los mismos valores de los valores seleccionados pero diferentes para las columnas "adicionales" agregadas, como el correo electrónico y el tiempo_actual? – xxstevenxo

Cuestiones relacionadas