我有两个具有相同结构且行略有不同的表 - 表A和表B. 我想提取表A中包含但表B中没有的所有行。 你能帮帮我吗?
顺便说一下 - 表A是定义形式,以前没有创建。
另外 - 我有15个sql脚本要分析。 我想找到一些软件可以帮助我实现整个过程的可视化(由15个sql脚本组成)。 你能提出一些好的建议吗?
答案 0 :(得分:7)
试
SELECT * FROM Table_A
EXCEPT
SELECT * FROM Table_B
请参阅http://en.wikipedia.org/wiki/Set_operations_%28SQL%29#EXCEPT_operator
答案 1 :(得分:1)
我经常遇到同样的问题所以我编写了自己的软件,可以有效地处理大型数据库(数十列,数万行)。我想你已经解决了你的问题,但如果其他人面临同样的问题,我会在这里发帖。
软件在R中,可以查询并保存到MySQL服务器。要测试它虽然可能更容易将基数导出到两个csv文件,因为配置MySQL链接(通过RMySQL)可能需要一些时间。在gitHub上查看。
我们在团队中定期使用它并对此感到满意。
答案 2 :(得分:0)
手动编写查询的痛苦,因此有些工具(如RedGate's SQL Compare)可以为您完成。但...
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
如果您对所有数据差异和仅有关键差异不感兴趣,那么只需更改您加入的字段列表并过滤到关键字段。
答案 3 :(得分:0)
一种方法是使用左外连接,这将在第一个表中选择all,然后在第二个表中匹配这些连接。如果来自第二个表的额外列为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