Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中更新价格_Mysql_Sql_Sql Update_Sql Insert - Fatal编程技术网

在mysql中更新价格

在mysql中更新价格,mysql,sql,sql-update,sql-insert,Mysql,Sql,Sql Update,Sql Insert,这就是我的文章表的样子:(tbl_文章) 等等 我的供应商以这种格式向我提供了一份新的价目表(待定供应商) 我如何用他的价格更新我的价目表?我们有共同的简短描述栏,但他也有新的文章。两个列表都包含10000多篇文章,导出到excel+垂直搜索不起作用 我试过了,但没有成功: UPDATE tbl_articles SET Gross = ( SELECT Gross FROM tb

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

等等

我的供应商以这种格式向我提供了一份新的价目表(待定供应商)

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

我试过了,但没有成功:

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

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

假设
SHORT\u DESCRIPTION
字段是表中实际的主要/唯一字段,最简单的方法是使用
insert
语句,其中包含关于重复密钥更新的
子句:

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\u 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)

short\u description
上创建唯一索引:

create unique index idx_articles_shortdesc on articles(short_description);
然后使用
insert。在重复密钥更新时

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);
您没有指定要更新描述,因此不包括该描述


作为说明。您可能需要研究缓慢变化的维度表。我认为一个更好的结构应该有一个生效日期和每个定价的结束日期。这允许您保存价格变化的历史记录。此外,我会保留记录创建的日期,以便知道产品是何时推出的。

short\u description
上创建唯一索引:

create unique index idx_articles_shortdesc on articles(short_description);
然后使用
insert。在重复密钥更新时

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
  tbl_articles a INNER JOIN tbl_supplier s
  ON a.short_description = s.short_description
SET
  a.gross=s.gross,
  a.net=s.net

您可以将更新查询与联接一起使用:

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

tbl_articles
表中的
SHORT_DESCRIPTION
是否有唯一索引?您将需要一个能够插入和更新现有记录,而无需更复杂的代码逻辑。。。重复密钥更新时
是,所有简短描述都是唯一的!这些值是唯一的,但您能否确认该列实际上有一个唯一的索引来执行此操作?@Dimi您可以更具体一点吗?
tbl\u articles
表是否在
SHORT\u DESCRIPTION
上有唯一的索引?您将需要一个能够插入和更新现有记录,而无需更复杂的代码逻辑。。。重复密钥更新时是,所有简短描述都是唯一的!这些值是唯一的,但您能否确认该列实际上有一个唯一的索引来执行该操作?@Dimi您能更具体一点吗?