【发布时间】:2014-06-01 08:00:50
【问题描述】:
假设我有 2 个表,分别称为 parent 和 child。一个父母可以有零到多个孩子,一个孩子可以有 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 约定
【问题讨论】:
-
在你的例子中 c_a 有 id=1,c_b id=2 ?
-
@GrzegorzMotyl 抱歉,这是我使用的约定,只是意识到我没有指定它们。
标签: mysql sql database relational-database