小编典典

如何构造SQL查询以查找作为其他两个特定对象的父对象的对象?

sql

假设我有2张桌子,分别称为父母和孩子。父母可以有零个到多个孩子,而一个孩子可以有1个到很多父母。如何找到作为两个特定孩子的父母的所有父母元素。

例如,假设我有父母[p_a,p_b,p_c,p_d]和孩子:[c_a,c_b]他们的结构如下:

  • p_a has c_a as a child
  • p_b has c_b as a child
  • p_c has both c_a and c_b as children
  • p_d has no children

如何制定查询以选择p_c?

如果它们的结构中p具有[id,name],而c具有[id,name],并且存在一个带有[parent_id,child_id]的join_table。(在此示例中,我还给了他们顺序ID以使事情变得更容易)。

我尝试解决此问题的方法是使用以下SQL

SELECT p.*
FROM parent AS p
JOIN join_table AS j ON p.id = j.parent_id
JOIN children AS c ON j.child_id = c.id
WHERE c = 1
  OR c = 2

但这显然会选择p_a和p_b以及p_c。我一直在寻找UNION运算符,但似乎无法使其正常运行。

期待您的回答,感谢您的阅读。麦克风

编辑:提到我用于示例的id约定


阅读 156

收藏
2021-04-14

共1个答案

小编典典

替代已接受答案的方法,可能更快:

SELECT p.*
FROM parent p JOIN join_table j ON p.id=j.parent_id
WHERE j.child_id=1 OR j.child_id=2
GROUP BY j.parent_id
HAVING COUNT(j.child_id)=2;
2021-04-14