我想知道是否有一种方法可以在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将返回大约30k行。

有什么方法来做我试图在直接sql上面? 只是直接从一个表(基本上是一个原始数据表)提取数据并插入到另一个表(基本上是一个处理过的数据表)?


当前回答

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'

其他回答

$insertdata="insert into partner_products(partner_id,partner_category_id,main_category_id, inventory_id,partner_product_name, partner_product_brand, partner_product_price,partner_product_quantity,partner_product_unit) select '123',partner_category_id,main_category_id,inventory_id, item_name,brand_name,item_price,item_qty, item_unit from inventory where partner_category_id='1'";
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'

对于整行 Insert into xyz select * from xyz2 where id="1";

对于所选列

insert into xyz(t_id,v_id,f_name) select t_id,v_id,f_name from xyz2 where id="1";
INSERT INTO Table1 SELECT * FROM Table2

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

在上面的查询中,有两个名为email和current_time的额外列。