在mysql中更新价格

时间:2015-06-10 13:54:13

标签: mysql sql sql-update sql-insert

这就是我的文章表格的样子:(tbl_articles)

ID | SHORT_DESCRIPTION | DESCRIPTION    | GROSS | NET
1  | v00556            | valve washroom | 9.00  | 7.49

我的供应商以这种格式(tbl_supplier)为我提供了一个新的价目表

SHORT_DESCRIPTION | DESCRIPTION    | GROSS | NET
v0056             | valve washroom | 9.50  | 7.99

如何以价格更新价目表?我们有一个共同的简短描述栏,但他也有新的文章。两个列表都包含10,000多篇文章,导出到excel +垂直搜索不起作用。

我试过了,但没有成功:

UPDATE 
    tbl_articles
SET 
    Gross = 
    (
        SELECT 
            Gross 
        FROM 
            tbl_supplier 
        WHERE 
            tbl_articles.SHORT_DESCRIPTION = tbl_supplier.SHORT_DESCRIPTION
    )

缺点:

  • 我的表中未添加新产品
  • 无法更新2个字段

3 个答案:

答案 0 :(得分:2)

假设SHORT_DESCRIPTION字段是表中的实际主要/唯一字段,最简单的方法是使用带有insert子句的on duplicate key update语句:

INSERT INTO tbl_articles 
(short_description, description, gross, net) -- Assumes ID is autogenerated
SELECT short_description, description, gross, net
FROM   tbl_supplier
ON DUPLICATE KEY UPDATE gross = VALUES(gross), net = VALUES(net)

答案 1 :(得分:2)

short_description上创建唯一索引:

create unique index idx_articles_shortdesc on articles(short_description);

然后使用insert . . . on duplicate key update

insert into tbl_articles(SHORT_DESCRIPTION, DESCRIPTION, GROSS, NET)
    select s.SHORT_DESCRIPTION, s.DESCRIPTION, s.GROSS, s.NET
    from tbl_supplier s
    on duplicate key update gross = values(gross), net = values(net);

您没有指定要更新说明,因此不包括在内。

作为一个说明。您可能希望调查缓慢变化的维度表。我认为更好的结构将为每个定价提供生效日期和结束日期。这允许您保留价格变化的历史记录。另外,我会记录创建记录的日期,所以我知道产品何时推出。

答案 2 :(得分:1)

您可以使用带有连接的UPDATE查询:

UPDATE
  tbl_articles a INNER JOIN tbl_supplier s
  ON a.short_description = s.short_description
SET
  a.gross=s.gross,
  a.net=s.net