2013-04-12 17 views
0

數據I有兩個數據庫Pupulate表中的MySQL

  1. DB1

  2. DB2

DB1具有控制器表的描述下面的表控制器

+-----------------------+--------------+------+-----+---------+-------+ 
| Field     | Type   | Null | Key | Default | Extra | 
+-----------------------+--------------+------+-----+---------+-------+ 
| id     | int(11)  | NO | PRI | NULL |  | 
| interface_name  | varchar(255) | YES |  | NULL |  | 
| store_number   | int(11)  | YES |  | NULL |  | 
| file_seq_no   | int(11)  | YES |  | NULL |  | 
| packet_seq_no   | int(11)  | YES |  | NULL |  | 
| last_trans_start_date | date   | YES |  | NULL |  | 
| last_trans_end_date | date   | YES |  | NULL |  | 
| last_extract_datetime | datetime  | YES |  | NULL |  | 
| is_enabled   | char(1)  | YES |  | NULL |  | 
+-----------------------+--------------+------+-----+---------+-------+ 

並與數據庫DB2 名稱存儲表可用不同的名稱相同的表的描述和附加的列(date_opened)。

我的工作是根據下面的邏輯寫一個查詢。

第1點:從db2.store中提取所有store_number,date_opened。

第2點:從db1.controller表中將所有store_number獲取到列表中。

第3點:過濾從db2.store中獲取的新store_number不存在於db1.controller中。

對於每個這些新store_number

新商店,file_seq_number和packet_seq_number插入默認的初始值將被設定爲零的。

last_transaction_start_date,last_transaction_end_date,last_extract_timestampwill是商店創建日期即db2.store.date_opened

啓用將被設置爲1

主要的查詢是

Insert into db1.controller table values(store_number, 0, 0,$date_opened,$date_opened, 
$date_opened,1); 

任何一個可以請幫我完成這個sql查詢。

在此先感謝

+0

@JW,你能建議我做些什麼來完成它嗎? – subodh

回答

1

這事我做了什麼

INSERT INTO db1.controller (接口名稱,store_number,file_seq_no,packet_seq_no,last_trans_start_date,last_trans_end_date,last_extract_datetime,is_enabled) SELECT '測試',S。 store_number,0,0,s.date_opened,s.date_opened,s.date_opened,'1' FROM db2store s其中s.store_number不在(從db1.controller中選擇store_number );

1

您可以通過兩種方式獲得過濾的數據。

隨着subquery

Select db2.store .* from db2.store where db2.store.id not in(Select db1.controller.id from db1.controller) 

這裏所有的新數據是不存在的db1.controller將顯示幫助。您也可以在連接的幫助下顯示相同的結果。

SELECT db2.store.* FROM db2.store LEFT JOIN db1.controller ON db2.store.ID = db1.controller.ID WHERE db1.controller.ID IS NULL 

你會得到它不存在於db1.controller現在遍歷數據,並執行你的插入查詢的數據。

更新

你可以試試下面單查詢添加過濾記錄。

Insert into db1.controller (id,interface_name,store_number,file_seq_no,packet_seq_no,last_trans_start_date,last_trans_end_date,last_extract_datetime,is_enabled) SELECT db2.store.id, db2.store.interface_name, db2.store.store_number, 0, 0, db2.store.date_opened, db2.store.date_opened, db2.store.date_opened, db2.store.is_enabled FROM db2.store LEFT JOIN db1.controller ON db2.store.ID = db1.controller.ID WHERE db1.controller.ID IS NULL; 
+0

感謝您的回覆,但我需要單個查詢,它將過濾的記錄插入到db1.controller表中。 – subodh

+0

嗯似乎很難等待一段時間,社區可能會幫助你。 –

+0

@subodh添加單個查詢嘗試。 –