在MySql中将值从一行复制到同一表中的另一行

Copy value from a row to another row in the same table in MySql

提问人:Tidjy 提问时间:10/19/2023 最后编辑:Tidjy 更新时间:10/19/2023 访问量:25

问:

这是我的表格“股票”

enter image description here

这是来自 3 家不同商店的产品数量。如您所见,所有产品都为“商店 1”提供了数量值,但没有为“商店 3”提供数量值(“商店 2”的数量无关紧要)。我需要一个 sql 查询将所有产品数量从“商店 1”复制到“商店 3”。

关于前面的屏幕截图,插入以下行:

id_product - id_shop - 数量

2136 - 3 - 9

2138 - 3 - 2

此外,如果“商店 3”中已存在产品数量,请将数量更新为“商店 1”中的数量值。

也许我需要尝试 2 个查询?如果存在,则一个用于更新,如果不存在,则用于插入?

不知道是否重要,但第 id_stock 列(不在屏幕截图上)是自动递增的。

尝试了更新部分的此查询,似乎有效,但我不知道插入部分。我的表有 6000+ 行:

UPDATE stocks sa
JOIN stocks sb ON sa.id_product = sb.id_product AND sb.quantity IS NOT NULL
SET sa.quantity = sb.quantity
WHERE sa.id_shop = 3

“show create table stocks”查询结果:

CREATE TABLE `stocks` (
  `id_stock_available` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `id_product` int(11) unsigned NOT NULL,
  `id_product_attribute` int(11) unsigned NOT NULL,
  `id_shop` int(11) unsigned NOT NULL,
  `id_shop_group` int(11) unsigned NOT NULL,
  `quantity` int(10) NOT NULL DEFAULT '0',
  `physical_quantity` int(11) NOT NULL DEFAULT '0',
  `reserved_quantity` int(11) NOT NULL DEFAULT '0',
  `depends_on_stock` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `out_of_stock` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `location` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id_stock_available`),
  UNIQUE KEY `product_sqlstock` (`id_product`,`id_product_attribute`,`id_shop`,`id_shop_group`),
  KEY `id_shop` (`id_shop`),
  KEY `id_shop_group` (`id_shop_group`),
  KEY `id_product` (`id_product`),
  KEY `id_product_attribute` (`id_product_attribute`)
) ENGINE=InnoDB AUTO_INCREMENT=17869 DEFAULT CHARSET=utf8mb4
mysql sql 更新 sql 插入

评论

0赞 P.Salmon 10/19/2023
请将show create table stock的结果添加为文本。
0赞 Tidjy 10/19/2023
我用结果更新了我的帖子。
0赞 user1191247 10/19/2023
您可以使用 或REPLACE INTO ... SELECT ...INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE ...

答: 暂无答案