我有两个结构相同但行略有不同的表 - 表 A 和表 B。我想提取表 A 中包含但表 B 中不包含的所有行。你能帮我做吗?
顺便说一句 - 表 A 是定义形式,它以前没有创建。
另外——我有 15 个 sql 脚本要分析。我想找到一些可以帮助我可视化整个过程(由 15 个 sql 脚本组成)的软件。你能推荐一些好的吗?
尝试
SELECT * FROM Table_A
EXCEPT
SELECT * FROM Table_B
请参阅http://en.wikipedia.org/wiki/Set_operations_%28SQL%29#EXCEPT_operator
一种方法是使用左外连接,这会选择第一个表中的所有内容,然后在第二个表中匹配这些内容。如果来自第二个表的额外列为 NULL,则第二个表中没有匹配的记录。
假设列 a 到 c 在两个表中都是唯一的
select a.*
from tableA a
left outer join tableB on a.a = b.a and ... a.c = b.c
where b.a is null and ... and b.c is null
我经常遇到同样的问题,所以我编写了自己的软件,可以有效地处理大型数据库(数十列,数万行)。我想你解决了你的问题,但如果其他人面临同样的问题,我会在这里发布。
该软件在 R 中,可以查询并保存到 MySQL 服务器。为了测试它,虽然将你的基础导出到两个 csv 文件可能更容易,因为配置 MySQL 链接(通过 RMySQL)可能需要一些时间。在gitHub上查看。
我们在我的团队中经常使用它并且对它很满意。
手动编写查询很麻烦,因此有一些工具(如RedGate 的 SQL 比较)可以为您完成。但...
SELECT
A.*
,B.*
FROM
A LEFT OUTER JOIN B
ON A.Field1 = B.Field1
AND A.Field2 = B.Field2
... -- join on each field
WHERE
B.Field1 IS NULL OR
B.Field2 IS NULL OR
... -- check for any NULL fields in B
如果您对所有数据差异不感兴趣,而只对关键差异感兴趣,那么只需更改您加入的字段列表并过滤到关键字段。