有人知道如何在PostgreSQL中执行这样的查询吗?
SELECT *
FROM tabA
WHERE NOT EXISTS (
SELECT *
FROM tabB
WHERE tabB.id = tabA.id
)
当我执行这个查询时,PostgreSQL会抱怨"ERROR: Greenplum数据库尚不支持该查询
"。
编辑:那么这个呢:
SELECT *
FROM tabA
WHERE NOT EXISTS (
SELECT *
FROM tabB WHERE tabB.id = tabA.id AND tabB.id2 = tabA.id2
)
编辑:
我在postgresql 8.2.15中测试了@ypercube提供的4个答案。结论如下:
1)第一个答案在这个版本的postgresql中不起作用,正如我在问题中所说的一样。错误消息也可以在那里找到。
2)对于其他三个答案,执行速度为:(3)LEFT JOIN > (4)EXCEPT >> (2)NOT IN。具体来说,对于语法相同的查询,(3)LEFT JOIN 大约需要5580毫秒,(4)EXCEPT大约需要13502毫秒,(2)NOT IN则需要超过100000毫秒(实际上我没有等待它完成)。
为什么NOT IN子句这么慢?有什么特别的原因吗?
Cheng
CREATE TABLE
),查询和执行计划。 - ypercubeᵀᴹ