我在数据库MyTable
和MyTableChanges
中有两个表。我想检测更改(从MyTableChanges
插入/删除的记录或已编辑的记录)。
有可能吗?我想仅使用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 :(得分:1)
使用natural join时,数据库将使用具有相同名称的所有列进行连接。 在这种情况下,这将允许您比较整个记录。
然后,使用外部联接,您可以找出哪个记录在另一个表中没有匹配的记录:
SELECT Table1.ID
FROM Table1 NATURAL LEFT JOIN Table2
WHERE Table2.ID IS NULL