提问人:Tidjy 提问时间:10/19/2023 最后编辑:Tidjy 更新时间:10/19/2023 访问量:25
在MySql中将值从一行复制到同一表中的另一行
Copy value from a row to another row in the same table in MySql
问:
这是我的表格“股票”
这是来自 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
答: 暂无答案
评论
REPLACE INTO ... SELECT ...
INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE ...