【问题标题】:mysql insert update LOAD DATA LOCAL INFILEmysql 插入更新 LOAD DATA LOCAL INFILE
【发布时间】:2013-08-20 00:12:24
【问题描述】:

我正在使用 LOAD DATA LOCAL INFILE 将数据加载到临时表 mid。然后我使用更新查询来更新在表产品中找到的内容。两者中唯一匹配的字段是模型。

$q  = "LOAD DATA LOCAL INFILE 'Mid.csv' INTO TABLE mid 
    FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'  IGNORE 1 LINES 
    (@col1,@col2,@col3,@col4,@col5,@col6) set model=@col1,price=@col3,stock=@col6 ";
mysql_query($q, $db);


mysql_query('UPDATE mid m, products p set p.products_price= m.price,p.products_quantity= m.stock where p.products_model= m.model');

它可以工作并更新产品表。我遇到的问题是中间表中的新记录在我使用更新语句时没有被插入。

我查看了插入查询并在重复时更新。我已经看到了大量示例,说明它何时必须在一个表上工作,但没有一个我必须将它与另一个表匹配。

要么我在寻找错误的东西,要么有其他方法可以做到这一点。

我将不胜感激。

问候

naf

【问题讨论】:

    标签: mysql


    【解决方案1】:

    我不确定 product 表中的其他列是什么,但假设 products_model 列在 products 表中是唯一的,下面是一个基于示例中的 3 列的基本方法:

    insert into products (products_price,products_quantity,products_model)
    select price, stock, model
    from mid
    on duplicate key update
      products_price = values(products_price),
      products_quantity = values(products_quantity)
    

    【讨论】:

    • 我尝试了上面的方法,但它仍然没有插入。产品表有超过 14 列。它有什么不同吗?
    • 如果您想在产品表中插入新行,那么您需要能够为所有列提供正确的值。 CSV 是否有您需要的数据?根据您的代码,我知道它至少有 6 列,所以也许如果您将整个 CSV 加载到一个表格中,它将为您提供所需的数据。
    • 产品表有很多字段我只想更新 products_price,products_quantity,products_model。csv 也有很多字段,但我只对价格、库存、模型感兴趣。如果模型不退出然后我希望它在 products 表中插入 products_price,products_quantity,products_model 并在其他相应的列中写入 null。
    • 它对我有用,只是对上述查询稍加扩充,即选择插入列表中的所有列。
    猜你喜欢
    • 2012-10-05
    • 1970-01-01
    • 2014-11-08
    • 2012-06-01
    • 2013-01-14
    • 2015-04-17
    • 2020-07-25
    • 2013-01-24
    相关资源
    最近更新 更多