SQL选择具有最少相关记录数的记录

时间:2014-07-19 01:50:48

标签: sql join count having-clause

monkey-hangouts将许多猴子与许多树木相关联,反之亦然。一只猴子在多棵树上闲逛。一棵树上有多只猴子。关系猴子挂钩模拟了许多猴子与树木的对比。

大部分猴子只在一棵树上闲逛。我喜欢在多棵树上闲逛的猴子的查询。也就是说,猴子在猴子聚会中有多个相关记录。作为奖励,我希望查询结果是实际环聊的猴子X树连接。

这是一个选择所有猴子及其视频群聊的查询。将此限制为具有多个环聊的猴子。

select 
    m.*, t.* 
from 
    monkeys m 
inner join 
    monkey-hangouts h on m.id = h.monkey_id 
inner join 
    trees t on t.id = h.tree_id 
order by 
    m.id;

2 个答案:

答案 0 :(得分:2)

您可以通过聚合猴子并计算树木数量来实现这一目标:

select m.*
from monkeys m join
     monkey_hangouts mh
     on m.id = mh.monkey_id
group by m.id
having count(distinct mh.tree_id) > 1;

修改:distinct mh.tree_id

答案 1 :(得分:2)

此查询选择具有多个猴子视频群聊的所有猴子及其树。

select m.*, t.* 
from monkeys m 
inner join monkey_hangouts h on m.id = h.monkey_id 
inner join trees t on t.id = h.tree_id
where m.id in (select monkey_id 
    from monkey_hangouts
    group by monkey_id
    having count(*) > 1)
order by m.id