请参阅以下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
答案 0 :(得分:1)
由于您运行了不同的查询,因此会得到不同的结果。
在第一个中,需要有一个匹配所有3个条件的子行。
在第二个条件中,每个条件都需要有一个子行,但两次都不必是同一个子行。