【问题标题】:PostgreSQL: multiple exists return incorrect resultPostgreSQL:多个存在返回不正确的结果
【发布时间】: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

【问题讨论】:

    标签: postgresql exists


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-19
      • 2012-04-11
      • 2016-02-06
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多