【发布时间】:2012-02-07 09:26:30
【问题描述】:
很难正确输入,但是我使用的是MySQL,我需要选择一个id,我们称之为parent_id,它必须满足多行的child_id值。
例如:
+-----------+----------+
| parent_id | child_id |
+-----------+----------+
| 1 | 10 |
+-----------+----------+
| 2 | 11 |
+-----------+----------+
| 2 | 12 |
+-----------+----------+
| 3 | 13 |
+-----------+----------+
| 4 | 11 |
+-----------+----------+
| 5 | 12 |
+-----------+----------+
现在,如果我传递 child_id 参数 11 和 12,我必须取回 parent_id 2,但如果我传递 10 和 11,我将什么也得不到。另外,如果我通过 11,我必须收到 4。如果我通过 13,我必须收到 3。
我该怎么做?我尝试计算 parent_id 并使用 HAVING 子句,也使用 GROUP BY 子句,但我尝试的都没有满足我的所有要求。
编辑:
小提琴示例:http://sqlfiddle.com/#!2/abbc4/5
EDIT2:
预期结果:
传递的参数:11、12 收到的结果:2
传递的参数:11 收到的结果:4
传递的参数:13 收到的结果:3
传递的参数:12、13 收到结果为NULL
EDIT3:
更新了规范。参见这里:http://sqlfiddle.com/#!2/2f750/1
【问题讨论】:
-
哇!甚至谷歌翻译也无法帮助我理解这一点。
-
这不是 OP 的错。这很容易理解:他想创建一个查询,仅当所有对应的
child_ids 都已指定且未指定属于不同parent_id的child_id时才返回parent_id -
10, 13会得到什么。没有?还是1和3?或者:对于11, 12, 13:什么都没有?还是2和3? -
@donkapone 现在,根据您的最新更新,
child_id in (11,12)应该返回null。请同时更新您的描述现在如果我传递 child_id 参数 11 和 12,我必须获取 parent_id 2 并更新 传递的参数:11、12 收到的结果:2跨度> -
但是如果我传递 child_ids 11 和 12,它仍然应该返回 parent_id 2,但是如果我只传递 11 作为 child_id,它应该返回 parent_id 4,而不是 parent_id 2,因为 parent_id 2 有更多 child_ids而不仅仅是 11。换句话说,要获得所需的 parent_id,您必须传递其所有子代。不多不少。