sql - 查找 PostgreSQL 中两个大表之间的差异

标签 sql postgresql left-join exists full-outer-join

我在 Postgres 中有两个类似的表,只有一个 32 字节的拉丁字段(简单的 md5 哈希)。 两个表都有大约 30,000,000 行。表格差异不大(10-1000行不同)

Postgres 是否有可能找到这些表之间的差异,结果应该是我上面描述的 10-1000 行。

这不是真正的任务,我只是想知道 PostgreSQL 如何处理类似 JOIN 的逻辑。

最佳答案

EXISTS似乎是最好的选择。

tbl1 就是这个例子中有多余行的表:

SELECT *
FROM   tbl1
WHERE  NOT EXISTS (SELECT FROM tbl2 WHERE tbl2.col = tbl1.col);

如果您不知道哪个表有多余的行或两个表都有,您可以切换表名后重复上述查询,或者:

SELECT *
FROM   tbl1
FULL   OUTER JOIN tbl2 USING (col)
WHERE  tbl2 col IS NULL OR
       tbl1.col IS NULL;

在后面的帖子中概述基本技术:

旁白:数据类型 uuid对于 md5 哈希是有效的:

关于sql - 查找 PostgreSQL 中两个大表之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15330403/

相关文章:

postgresql - 使用 JOOQ 获取 Postgres UDT 值

php - 如何在 PostgreSQL 9.1 中使用 pgFouine?

mysql - 获取最后一次对话

c# - MS Access 数据库 SQL 查询

mysql - 使用 NOT IN 子查询绕过 MySql 错误 1093

PHP MySQL : Select from same table multiple times without database load for each query?

mysql - SQL 选择仅包含特殊字符的值

sql - 是否可以对所有行的子集设置唯一约束?

r - R(dplyr)中的Left Join-观察太多?

php - 带左连接的 Mysql 查询 - 如果两行相同则专用索引