PostgreSQL:多个存在返回不正确的结果

Posted

技术标签:

【中文标题】PostgreSQL:多个存在返回不正确的结果【英文标题】:PostgreSQL: multiple exists return incorrect result 【发布时间】:2014-06-12 09:24:09 【问题描述】:

请参阅以下pastebin 以获取完整示例。为什么Query 2 返回的结果与Query 1 不同?我认为Query 2 具有相关的子查询,因此它们应该每行执行一次,但它的工作方式就像子查询与OR 而不是AND 连接。

-- Query 1

SELECT id
FROM parent p
WHERE EXISTS(
    SELECT 1
    FROM child
    WHERE child.parent_id = p.id AND child.field_1 = 1 AND child.field_2 = 1
)

-- Query 2

SELECT id
FROM parent p
WHERE EXISTS(
    SELECT 1
    FROM child
    WHERE child.parent_id = p.id AND child.field_1 = 1
) AND EXISTS(
    SELECT 1
    FROM child
    WHERE child.parent_id = p.id AND child.field_2 = 1
)

Query 1 的实际结果:

id
--
2
3
4

Query 2 的实际结果:

id
--
2
3
4
5

【问题讨论】:

【参考方案1】:

由于您运行不同的查询,您会得到不同的结果。

在第一个中,需要有一个匹配所有 3 个条件的子行。

在第二个中,每组条件都需要有一个子行,但不必两次都是同一个子行。

【讨论】:

以上是关于PostgreSQL:多个存在返回不正确的结果的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQl 函数返回多个动态结果集

PostgreSQL & JDBC“查询返回了多个结果集”

存在于 where 子句中返回不正确的结果

Postgresql:查询返回不正确的数据

来自 PostgreSQL 函数的多个 JDBC 结果集

postgresql----IN&&EXISTS