【问题标题】:mySQL :: insert into table, data from another table?mySQL::insert into table,来自另一个表的数据?
【发布时间】:2011-05-13 14:24:35
【问题描述】:

我想知道是否有办法纯粹在 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 中执行我在上面尝试的操作吗? 直接从一个表(基本上是原始数据表)中提取数据并插入到另一个表(基本上是处理过的数据表)中?

【问题讨论】:

    标签: sql mysql


    【解决方案1】:
    $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'";
    

    【讨论】:

    • 请解释您的解决方案。没有解释且只有代码的答案会被标记为省力。
    • 请提供您的答案的解释,而不仅仅是代码。它将帮助某人从您的答案中学习,而不仅仅是复制它
    【解决方案2】:

    此查询用于将数据从一个表添加到另一个表 使用外键

    let qry = "INSERT INTO `tb_customer_master` (`My_Referral_Code`, `City_Id`, `Cust_Name`, `Reg_Date_Time`, `Mobile_Number`, `Email_Id`, `Gender`, `Cust_Age`, `Profile_Image`, `Token`, `App_Type`, `Refer_By_Referral_Code`, `Status`) values ('" + randomstring.generate(7) + "', '" + req.body.City_Id + "', '" + req.body.Cust_Name + "', '" + req.body.Reg_Date_Time + "','" + req.body.Mobile_Number + "','" + req.body.Email_Id + "','" + req.body.Gender + "','" + req.body.Cust_Age + "','" + req.body.Profile_Image + "','" + req.body.Token + "','" + req.body.App_Type + "','" + req.body.Refer_By_Referral_Code + "','" + req.body.Status + "')";
                            connection.query(qry, (err, rows) => {
                                if (err) { res.send(err) } else {
                                    let insert = "INSERT INTO `tb_customer_and_transaction_master` (`Cust_Id`)values ('" + rows.insertId + "')";
                                    connection.query(insert, (err) => {
                                        if (err) {
                                            res.json(err)
                                        } else {
                                            res.json("Customer added")
                                        }
                                    })
                                }
        
        
                            })
                        }
                    }
        
                }
            })
        })
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
    【解决方案3】:
    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_idis_deleted 那样复制一些列,因此我们从另一个表中选择了硬编码的列
    3. 我们在源代码中使用的表还包含自动增量字段,因此我们留下了该列,并在执行查询时自动插入。

    执行结果

    1 个查询已执行,1 个成功,0 个错误,0 个警告

    查询:插入到primary_image (style_id,pre_image_status,file_extension,reviewer_id,uploader_id,is_deleted,last_updated) select ...

    5 行受影响

    执行时间:0.385 秒 传输时间:0秒 总时间:0.386 秒

    【讨论】:

      【解决方案4】:

      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 个额外的列名为 emailcurrent_time

      【讨论】:

      • 如果我想插入三行数据,这些数据的选择值相同,但添加的“附加”列的值不同,例如 email 和 current_time?
      【解决方案5】:
      INSERT INTO Table1 SELECT * FROM Table2
      

      【讨论】:

      • 这是一个非常低质量的答案。另外,与公认的答案不同,它甚至不会尝试与问题中包含的信息相关联。
      【解决方案6】:

      整行

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

      【讨论】:

      • 如果已经存在具有匹配主键的记录,则整行方法将失败。
      • 您找到解决方案了吗?
      【解决方案7】:
      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'
      

      【讨论】:

      • @InSane: 1) 给出答案 2) 更正问题格式。下次不要错过订单;-)
      • 哈哈 :-) 是的..我从来没有设法让我的优先事项排序! :-D
      • 工作! +1 完美且非常快!谢了哥们。只需从 SELECT 字段中删除括号...
      • @zerkms;触发器可以与 INSERT INTO ... SELECT 语句一起使用吗?
      • @hacks 我相信就像它只是一个“正常”INSERT
      猜你喜欢
      • 2010-10-26
      • 2016-04-23
      • 2015-12-10
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2011-12-04
      • 1970-01-01
      相关资源
      最近更新 更多