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

时间:2014-06-12 09:24:09

标签: postgresql exists

请参阅以下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 个答案:

答案 0 :(得分:1)

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

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

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