作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前有两个结构相同的表。表 A(作为示例)有 10,000 行,表 B 有 100,000 行。我需要获取表 B 中不在表 A 中的行,但前提是某些字段相同(并且有一个字段不同)。
现在,查询是这样的:
select *
from tableA A
where (A.field1, A.field2) in (select field1, field2 from tableB B)
and A.field3 not in (select field3 from B)
这行得通,但可能可以使用 JOIN
来完成性能更好的解决方案。我曾尝试这样做,但我得到的只是一个非常庞大的重复行列表。有人能指出我正确的方向吗?
最佳答案
根据您当前的查询,这就是它转换为连接的内容:
select *
from tableA A
inner join tableB B on A.field1 = B.field1 and A.field2 = B.field2
left outer join tableB C on A.field3 = C.field3
where c.field3 is null
更快的查询是:
select A.pk
from tableA A
inner join tableB B on A.field1 = B.field1 and A.field2 = B.field2
left outer join tableB C on A.field3 = C.field3
where c.field3 is null
group by A.pk
这将为您提供需要添加到表 B 的行,因为它们未找到。
或者你可以只获取你想要拉过来的字段:
select A.field1, A.field2, A.field3
from tableA A
inner join tableB B on A.field1 = B.field1 and A.field2 = B.field2
left outer join tableB C on A.field3 = C.field3
where c.field3 is null
group by A.field1, A.field2, A.field3
关于sql - 将带有 IN/NOT IN 的 PostgreSQL 查询转换为 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43978780/
我是一名优秀的程序员,十分优秀!