假设我有2张桌子,分别称为父母和孩子。父母可以有零个到多个孩子,而一个孩子可以有1个到很多父母。如何找到作为两个特定孩子的父母的所有父母元素。
例如,假设我有父母[p_a,p_b,p_c,p_d]和孩子:[c_a,c_b]他们的结构如下:
如何制定查询以选择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约定
替代已接受答案的方法,可能更快:
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;