2014-09-24 55 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