这将返回所有具有[至少]个孩子带有“ fizz” foo和[至少]个孩子带有“ buzz” foo的所有父记录。我认为这是问题中所需要的。
同样,虽然该查询可能不是最佳选择,但从某种意义上来说,它是通用的,它可以与大多数sql实现一起使用,不仅适用于支持CTE,子查询和相关结构的更现代的sql实现。
SELECT DISTINCT Parent.ID
FROM Parent
JOIN Child C1 ON Parent.ID = C1.parent_Id
JOIN Child C2 ON Parent.ID = C2.parent_id
WHERE C1.foo = 'fizz'
AND C2.foo = 'buzz'
: 既然Joel Potter已经在他的答案中修复了该查询,我们可能同意他的方法比上面列出的查询具有多个优点(请给他一些+ reps)。特别是:
以下是Joel在这里进行的查询(稍作修改),以显示如何将其扩展为2个以上的foo值。
SELECT Parent.Id
FROM Parent
INNER JOIN Child on Parent.Id = child.parent_id
WHERE Child.foo IN ('fizz', 'buzz') -- or say, ... IN ('fizz', 'buzz', 'bang', 'dong')
GROUP BY Parent.Id
HAVING COUNT(DISTINCT Child.foo) = 2 -- or 4 ...