0

我与这两个表建立了一对多的关系:

p2c {
    parent_id,
    child_id
}

child {
    child_id, -- pk
    count1,
    count2
}

如果我这样做:

select distinct parent_id from p2c 
join child on p2c.child_id = child.child_id
where count1 = count2

我得到了父母,其中一个孩子的人数相等。如何让所有孩子的计数都相等的父母?

4

3 回答 3

4

您可以按如下方式使用 GROUP BY/HAVING:

select  parent_id 
from    p2c 
        join child on p2c.child_id = child.child_id
group by parent_id
having count(case when count1 = count2 then 1 end) = count(*);

这基本上计算行,count1 = count2并且仅返回parent_id此计数与总数相同的 s

于 2013-11-06T20:22:03.290 回答
1

首先使用派生表,以获取匹配的行数和行数:

  select
    *
    from
    pc2
    join
    (
    select
    child_id,
    count1,
    count2,
    count(child_id) as NUM_ROWS,
    count(case when count1 = count2 then 1 else null) as NUM_MATCHES
    from child
    group by child_Id
    ) child
    on pc2.child_id = child.child_id
    where child.num_rows = num_matches
于 2013-11-06T20:23:53.803 回答
0

您混淆了孩子和父母,这有点令人困惑。孩子应该指代它的父母,而不是相反。

于 2013-11-06T21:05:42.670 回答