2012-04-03 62 views
1

我需要一些幫助合併不同SQLLite數據庫中的兩個表。SQL表合併算法

我們來看錶T1T2。這些表具有相同的模式,但生活在不同的數據庫中。我們假設T1生活在名爲DB_Target的數據庫中,T2住在數據庫DB_Source中。對於表的模式很簡單:

Table Columns 
-------------------------------------- 
T1  id, url, cat 
T2  id, url, cat 

我要合併的兩個表,所以如果第一個表包含從第二臺網址剛剛更新的貓柱,否則從URL和貓添加到首先通過增加id。簡單的算法是:

for url2 in second_table: 
    url1 = "SELECT url FROM first_table" 
    if url1 == url2 then Update first_table 
    else INSERT INTO first_table and increment id 

由於這兩個表包含大約10K的URL,這是很長的,有沒有什麼算法SQL合併???

+0

只是在您使用** sqlite **庫的語言中實現算法 - 或者用語言標記您的問題以獲得更多幫助..我不認爲** 2數據庫**可以使用SQL進行合併只有.. – Aprillion 2012-04-03 10:52:08

回答

3

我不是你的什麼,你恰恰需要說明100%的清楚,但我認爲這是這樣的:

首先,運行與T2匹配的URL更新T1 ...

UPDATE  T1 
SET  T1.Cat = T2.Cat 
FROM  Table1 T1 
INNER JOIN Table2 T2 on T1.URL = T2.URL 

其次從T2插入額外的記錄進入T1 ....

INSERT INTO Table1 (id, url, cat) 
SELECT  T2.id, T2.URL, T2.Cat 
FROM  Table2 T2 
LEFT JOIN Table1 T1 on T2.URL = T1.URL 
WHERE  T1.URL IS NULL 

注:

  • 您沒有指定數據庫&版本您正在使用。單一MERGE聲明也可能是一個選項。
  • 目前還不清楚身份證是身份證/自動增量字段。如果是,從插入語句

UPDATE SQL精簡版

我只是順便使用SQLLite下降的ID,所以藉此與一粒鹽。但是,看起來您需要發出兩個ATTACH DATABASEdocs)命令來確保DB1和DB2都連接到連接。例如:

ATTACH DATABASE filename AS database-name; 

一旦連接了兩個數據庫,您可以在數據庫名稱前加上表名。因此,讓我們說你附加表1爲DB_Target和表2爲DB_Source選擇將演變成類似...

UPDATE  T1 
SET  T1.Cat = T2.Cat 
FROM  DB_Target.Table1 T1 
INNER JOIN DB_Source.Table2 T2 on T1.URL = T2.URL 

這裏是an article that walks you through它有點更深入。

+0

我正在使用sqlite3,在兩個不同的數據庫中有兩個表:db1中的table1,db2中的table2 – user873286 2012-04-03 10:43:02