1

我有两个结构相同但行略有不同的表 - 表 A 和表 B。我想提取表 A 中包含但表 B 中不包含的所有行。你能帮我做吗?

顺便说一句 - 表 A 是定义形式,它以前没有创建。

另外——我有 15 个 sql 脚本要分析。我想找到一些可以帮助我可视化整个过程(由 15 个 sql 脚本组成)的软件。你能推荐一些好的吗?

4

4 回答 4

7

尝试

SELECT * FROM Table_A
EXCEPT
SELECT * FROM Table_B

请参阅http://en.wikipedia.org/wiki/Set_operations_%28SQL%29#EXCEPT_operator

于 2012-07-26T15:21:06.893 回答
1

一种方法是使用左外连接,这会选择第一个表中的所有内容,然后在第二个表中匹配这些内容。如果来自第二个表的额外列为 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
于 2012-07-26T15:21:51.017 回答
1

我经常遇到同样的问题,所以我编写了自己的软件,可以有效地处理大型数据库(数十列,数万行)。我想你解决了你的问题,但如果其他人面临同样的问题,我会在这里发布。

该软件在 R 中,可以查询并保存到 MySQL 服务器。为了测试它,虽然将你的基础导出到两个 csv 文件可能更容易,因为配置 MySQL 链接(通过 RMySQL)可能需要一些时间。在gitHub上查看。

我们在我的团队中经常使用它并且对它很满意。

于 2013-01-04T23:02:17.137 回答
0

手动编写查询很麻烦,因此有一些工具(如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

如果您对所有数据差异不感兴趣,而只对关键差异感兴趣,那么只需更改您加入的字段列表并过滤到关键字段。

于 2012-07-26T15:20:07.693 回答