2014-02-10 66 views
1

我在數據庫MyTableMyTableChanges中有兩個表。我想檢測更改(哪些記錄是從MyTableChanges插入/刪除或編輯的)。在SQLite中比較兩個表

可能嗎?我只想使用SQLite查詢來執行此操作。

我知道我可以使用2個查詢類似下面的檢測插入和移除行:

SELECT DISTINCT SomePrimaryKey 
FROM MyTable 
WHERE SomePrimaryKey Not IN 
    (SELECT DISTINCT SomePrimaryKey FROM MyTableChanges) 

但如何比較的變化?也許有一些辦法,處理列和連接上的哈希。我不知道如何開始。請建議我!

編輯
我知道我可以做這樣的事情:

CREATE TABLE Test1 
(
    MI_PRINX INTEGER PRIMARY KEY AUTOINCREMENT, 
    Name CHAR(100), 
    Value INTEGER 
); 

CREATE TABLE Test2 
(
    MI_PRINX INTEGER PRIMARY KEY AUTOINCREMENT, 
    Name CHAR(100), 
    Value INTEGER 
); 

INSERT INTO Test1 (Name, Value) VALUES('Name1', 1); 
INSERT INTO Test1 (Name, Value) VALUES('Name2', 2); 
INSERT INTO Test1 (Name, Value) VALUES('Name3', 3); 
INSERT INTO Test1 (Name, Value) VALUES('Name4', 4); 

INSERT INTO Test2 (Name, Value) VALUES('Name1', 2); 
INSERT INTO Test2 (Name, Value) VALUES('Name3', 3); 
INSERT INTO Test2 (Name, Value) VALUES('Name4', 5); 
INSERT INTO Test2 (Name, Value) VALUES('Name5', 6); 
INSERT INTO Test2 (Name, Value) VALUES('Name6', 7); 
INSERT INTO Test2 (Name, Value) VALUES('Name7', 8); 

-- suppose Name is unique 

SELECT * FROM Test1 JOIN Test2 ON Test1.Name = Test2.Name 
WHERE Test1.Value <> Test2.Value 

但它有點不舒服的解決方案,因爲我需要爲許多列很長的查詢...任何其他的想法?

+0

不,它只是MyTable'的'副本。我想將平板設備與服務器同步。 – Nickon

回答

1

當您使用natural join時,數據庫將使用所有具有相同名稱的列進行連接。 在這種情況下,這將允許您比較整個記錄。

然後,使用外連接,你可以找出哪些記錄沒有匹配的記錄中的其他表:

SELECT Table1.ID 
FROM Table1 NATURAL LEFT JOIN Table2 
WHERE Table2.ID IS NULL