2012-04-03 5 views
1

다른 SQLLite 데이터베이스에서 두 테이블을 병합하는 데 도움이 필요합니다.SQL 테이블 병합 알고리즘

표를 T1T2라고합시다. 테이블에는 동일한 스키마가 있지만 다른 데이터베이스에 있습니다. T1DB_Source이라는 데이터베이스에있는 DB_TargetT2이라는 이름의 db에 살고 있다고 가정 해 봅시다.

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

내가 두 테이블을 병합 할, 그래서 첫 번째 테이블은 두 번째 테이블에서 URL을 포함하는 경우 단지, 고양이 열을 업데이트 그렇지 않으면에 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 

테이블 모두 SQL 병합에 대한 알고리즘이, 그것은 매우 긴 약 10K URL을 포함로 ???

+0

그냥 ** sqlite ** 라이브러리를 사용하는 언어로 알고리즘을 구현하거나 더 많은 도움을 얻으려면 언어로 질문에 태그를 답니다. ** 2 데이터베이스 **는 SQL을 사용하여 병합 할 수 있다고 생각하지 않습니다. 오직 .. – Aprillion

답변

3

난 당신이 정확하게 필요에 당신의 묘사에서 100 % 분명 아니지만, 내가 그것을 이런 식으로 뭔가 생각 :

첫째, T2에서 일치하는 URL을 업데이트 T1을 실행 ...

두 번째는 T1에 T2에서 추가 레코드를 삽입
UPDATE  T1 
SET  T1.Cat = T2.Cat 
FROM  Table1 T1 
INNER JOIN Table2 T2 on T1.URL = T2.URL 

....

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 문도 옵션 일 수 있습니다.
  • ID가 신분/자동 증분 필드인지 여부는 분명하지 않습니다. 이 경우, 삽입 문

UPDATE SQL 라이트

난 단지 지나가는 SQLLite를 사용에서 ID를 삭제, 그래서 에누리이 걸릴. 그러나 두 개의 ATTACH DATABASE (docs) 명령을 _ 행하여 DB1과 DB2가 모두 연결에 연결되어 있는지 확인해야합니다. 다음과 같이하십시오 :

ATTACH DATABASE filename AS database-name; 

두 데이터베이스가 연결되면 데이터베이스 이름 앞에 테이블 이름을 추가 할 수 있습니다. 그래서 여기

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 그것입니다 ... 이제 당신이 뭔가 등으로 발전 할 DB_Source 선택으로 DB_Target 및 표 2로 표를 첨부 가정 해 봅시다.

+0

나는 두 개의 다른 데이터베이스에 두 테이블이 sqlite3를 사용하고 있습니다 : db1의 table1, db2의 table2 – user873286