2014-09-24 43 views
0

我通常非常机智,但我被困在这一个。任何帮助,将不胜感激。mysql通过加入插入外部数据

假设我有一张农产品表,就像这样,包括每种农产品类型的已售/已存货数量。

+--------------+--------------+------+-----+ 
| 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('potato',3),('onion',5)和stock_count('potato',8),('carrots',6)做一个插入,I' ð想用这个来结束:

+--------------+------------+-------------+ 
| produce_type | sold_count | stock_count | 
+--------------+------------+-------------+ 
| potato  |   3 |   8 | 
| onion  |   5 |  NULL | 
| carrots  |  NULL |   6 | 
+--------------+------------+-------------+ 

所以我需要加入到现有的在第二列的INSERT语句的数据,但我看到这里或其他地方在网络上是说明从另一个插入时加入表。

INSERT IGNORE不会这样做,因为其中一个“马铃薯”列不会被写入。

INSERT ... ON DUPLICATE KEY UPDATE变得更近,但我无法弄清楚如何将更新字段设置为我插入的数据集的值。

是否需要为第二次插入(+外连接)创建临时表?任何结构更简单的方法呢?

在此先感谢。

编辑:我想我可以probaly使用: https://stackoverflow.com/a/3466/2540707

回答

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 
                ); 
+0

不完全。第一个插入将创建produce_type和sold_count,然后后面的插入基于外部数据更新stock_count。 – 2014-09-25 18:22:29