odi*_*apc 10 sql postgresql exists left-join full-outer-join
我在Postgres中有两个类似的表,只有一个32字节的拉丁字段(简单的md5哈希).两个表都有~30,000,000行.表没什么区别(10-1000行不同)
Postgres是否可以找到这些表之间的差异,结果应该是我上面描述的10-1000行.
这不是一个真正的任务,我只想知道PostgreSQL如何处理类似JOIN的逻辑.
Erw*_*ter 26
最好的选择可能是EXISTS反半连接:
tbl1 是此示例中具有剩余行的表:
SELECT *
FROM tbl1
WHERE NOT EXISTS (SELECT 1 FROM tbl2 WHERE tbl2.col = tbl1.col);
Run Code Online (Sandbox Code Playgroud)
如果您不知道哪个表有剩余行或两者都有,可以在切换表名后重复上述查询,或者:
SELECT *
FROM tbl1
FULL OUTER JOIN tbl2 USING (col)
WHERE tbl2 col IS NULL OR
tbl1.col IS NULL;
Run Code Online (Sandbox Code Playgroud)
以后帖子中的基本技术概述:
顺便说一句,使用md5哈希列的效率要高得多uuid:
为了补充现有答案,我使用row()连接条件函数。这允许您比较整行。例如,我查看对称差异的典型查询如下所示
select *
from tbl1
full outer join tbl2
on row(tbl1) = row(tbl2)
where tbl1.col is null
or tbl2.col is null
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21160 次 |
| 最近记录: |