各位同学,请给我一些启发。使用“食谱”的例子来解释是最容易的。有食谱,有配料。多对多标志看起来像这样:
-------------------------
| recipes_ingredients |
-------------------------
recipe_id | ingredient_id
-------------------------
r_id_1 | i_id_1
r_id_1 | i_id_2
r_id_2 | i_id_3
r_id_2 | i_id_2
r_id_2 | i_id_4
r_id_3 | i_id_1
r_id_3 | i_id_2
用户想要选择仅包含成分i_id_1 AND i_id_2的所有食谱。这些产品可能包含在其他食谱中,但由于这些其他食谱还包含用户没有的其他产品,因此结果应包括 2 个带有r_id_1和 的食谱r_id_3。我尝试了任何和所有的选择,如下所示:
select * from recipes_ingredients
where ingredient_id = any('{i_id_1, i_id_2}');
但很明显,在此选项中选择了“ And Recipe with ” r_id_2。
我尝试使用子查询以某种方式解决它,但很明显我缺乏知识和经验,而且我无法凭记忆给出查询的示例。一般来说,我会感谢您的帮助!
正常的逻辑划分。一般来说,你可以这样做: