假设我有 2 个表,分别称为父表和子表。一个父母可以有 0 到多个孩子,一个孩子可以有 1 到多个父母。如何找到作为两个特定子元素的父元素的所有父元素。
例如,假设我有父母 [p_a, p_b, p_c, p_d] 和孩子: [c_a, c_b]
它们的结构如下:
- p_a 有 c_a 作为孩子
- p_b 有 c_b 作为孩子
- p_c 有 c_a 和 c_b 作为子级
- p_d没有孩子
如何制定查询来选择 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 约定
您正在寻找存在两个特定子记录的父项。使用 EXISTS 子句:
SELECT *
FROM parent p
WHERE EXISTS (select * from join_table j where j.parent_id = p.id and j.child_id = 1)
AND EXISTS (select * from join_table j where j.parent_id = p.id and j.child_id = 2);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)