这就是我的文章表格的样子:(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
)
缺点:
答案 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