任何人都知道如何在 Postgresql 中执行这样的查询?
SELECT *
FROM tabA
WHERE NOT EXISTS (
SELECT *
FROM tabB
WHERE tabB.id = tabA.id
)
当我执行这样的查询时,postgresql 抱怨“ ERROR: Greenplum Database does not yet support that query
。”
编辑:这个怎么样:
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 子句这么慢有什么特别的原因吗?
程