在 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
)
不足之处:
- 新产品没有添加到我的table
- 无法更新 2 个字段
假设 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
这是我的文章 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
)
不足之处:
- 新产品没有添加到我的table
- 无法更新 2 个字段
假设 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