2012-04-03 55 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