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:多个存在返回不正确的结果的主要内容,如果未能解决你的问题,请参考以下文章