我有两个SQLite表格要比较。要设置表格:
CREATE TABLE A (Value);
CREATE TABLE B (Value);
INSERT INTO A VALUES (1);
INSERT INTO A VALUES (1);
INSERT INTO B VALUES (2);
INSERT INTO B VALUES (1);
比较两个表时,最接近的方法是使用下面的SQL:
SELECT 'A' AS Diff, *
FROM (SELECT * FROM A EXCEPT SELECT * FROM B)
UNION ALL
SELECT 'B' AS Diff, *
FROM (SELECT * FROM B EXCEPT SELECT * FROM A)
我想要的结果是
A; 1
B; 2
不过,我只得到
B; 2
因为EXCEPT关键字会删除来自表A的所有1,而不管表B中有多少个1。
我应该如何比较这两个表?
4条答案
按热度按时间rseugnpd1#
你能试试用-
你应该能给予结果-
我使用了distinct,因为您的表没有定义主键或unique,因此没有Distinct的查询可能会显示重复项。
你也可以尝试使用一些免费的数据库比较工具来进行复杂的比较。有一些工具可以比较表、过程等。这些工具也会为差异生成脚本。但是,我从来没有这样的工具用于sql lite。所以,我不确定这样的工具是否适用于sql lite。
dw1jzc5e2#
您也可以简单地使用DiffKit这样的工具:
www.diffkit.org
9jyewag03#
我找到了答案。如果表有多列,那么代码就很多,但是我可以使用相同的模式通过编程生成SQL。
ig9co6j14#
如果只是为了观察变化,您可以使用KS DB Merge Tools for SQLite(我是该工具的作者):
不幸的是,这是从付费专业版截图。也有一个免费版本,但它不能比较不同的表,但它可以比较不同的数据库文件之间的相同表。
如果需要构建基于SQL的解决方案,则一般方法应该是完全外部连接,它可以返回任何表中的公共/匹配记录和丢失记录。它是not supported by SQLite,但可以以不同的方式是emulated。然而,它不适用于此具体情况,因为这些表没有主键。