我通常都很机智,但我坚持这个。任何帮助将不胜感激。
假设我有一张产品表,就像这样,包括每种产品类型的销售/库存数量。
+--------------+--------------+------+-----+
| Field | Type | Null | Key |
+--------------+--------------+------+-----+
| produce_type | varchar(100) | NO | PRI |
| sold_count | int(8) | YES | |
| stock_count | int(8) | YES | |
+--------------+--------------+------+-----+
我正在为每个“库存”和“已售出”计数使用外部数据单独插入,一次有数百到数千个produce_types。我可能只有要插入的'stock'或'sold'数据中存在给定produce_type的数据,但希望所有数据都存在于表中。
所以,例如,为sold_count('马铃薯',3),('洋葱',5)做一个插入,为stock_count('马铃薯',8)做一个插入,('胡萝卜',6),我想结束这个:
+--------------+------------+-------------+
| produce_type | sold_count | stock_count |
+--------------+------------+-------------+
| potato | 3 | 8 |
| onion | 5 | NULL |
| carrots | NULL | 6 |
+--------------+------------+-------------+
所以我需要在第二列的insert语句中加入现有数据,但是我在这里或Web上的其他地方看到的是从另一个表插入时的连接指令。
INSERT IGNORE没有这样做,因为其中一个'马铃薯'列不会被写入。
INSERT ... ON DUPLICATE KEY UPDATE越来越近但我无法弄清楚如何将更新字段设置为我插入的数据集中的值。
我是否需要为第二个插入(+外连接)创建临时表?任何结构上更简单的方法吗?
提前致谢。
编辑:我想我可以使用这个: https://stackoverflow.com/a/3466/2540707
答案 0 :(得分:0)
这有效吗?
insert into produce ( produce_type, sold_count )
select produce_type, sold_count from sold_data
on duplicate key update sold_count = ( select sold_count from sold_data
where produce.produce_type = sold_data.produce_type
);