在 mysql 更新价格

Update prices in mysql

这是我的文章 table 的样子:(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
    )

不足之处:

假设 SHORT_DESCRIPTION 字段是 table 中的实际 primary/unique,最简单的做法是使用 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)

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

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

作为注释。您可能想要研究缓慢变化的维度表。我认为更好的结构应该为每个定价指定生效日期和结束日期。这使您可以保留价格变化的历史记录。另外,我会记录创建记录的日期,这样我就知道产品是什么时候推出的。

您可以将 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