我有2个表:ParentChild和Child。
ParentChild表有2列PID和CID,其中1个PID可以映射到多个CID。子表包含不同的CID。问题是Child表中的CID不一定涵盖ParentChild表中的所有CID。
现在我想找到每个PID在Child表中拥有所有CID的所有PID。例子: P1有3个CID,如果所有都在Child表中,则选择P1; P2有2个CID,如果不是全部都在子表中,则不选择P2。
如何以清晰,高效的方式编写查询?
答案 0 :(得分:3)
一种方法使用聚合:
select pc.pid
from parentchild pc left join
child c
on pc.cid = c.cid
group by pc.pid
having count(*) = count(c.cid);
最后一个条件检查所有孩子是否匹配。