你好(我是这个领域的菜鸟),我有一个MySQL数据库,它有下一个表:
所以有3个表,一个名为" INGREDIENTES "有成分和另一个称为" RECETAS "有食谱的。我连接2个表的方式是一个名为" INGREDIENTES_RECETAS "的表,这个表有一个复合主键" id_ingrediente + id_receta ",因为配方中含有未知数量的成分。
问题在于我无法弄清楚如何通过一些未知的" id_ingrediente "来创建一个过滤食谱的查询。
我在考虑类似的事情:
SELECT id_receta FROM INGREDIENTES_RECETAS WHERE id_ingrediente CONTAINS (89 AND 18);
我想解决这个问题,避免PL / SQL,只使用SQL。有可能吗?
我在java应用程序中使用它,所以如果有一种以编程方式执行此操作的方法,它也将解决问题。
如果我必须使用PL / SQL,我该如何调用" 过程"在java中,使用jdbc驱动程序?
感谢您的帮助。
答案 0 :(得分:1)
如果你正在寻找含有成分89和18的配方,那么加入INGREDIENTES_RECETAS
自己来形成成对的成分,你可以过滤它们:
SELECT ir1.id_receta
FROM INGREDIENTES_RECETAS ir1
INNER JOIN INGREDIENTES_RECETAS ir2 ON ir1.id_receta = ir2.id_receta
WHERE ir1.id_ingrediente = 89 AND ir2.id_ingrediente = 18;
答案 1 :(得分:0)
SELECT id_receta FROM INGREDIENTES_RECETAS WHERE id_ingrediente IN (89, 18);
或
SELECT id_receta FROM INGREDIENTES_RECETAS WHERE (id_ingrediente = 89) OR (id_ingrediente = 18);
答案 2 :(得分:0)
看起来您需要一个id_receta
列表,其中id_ingrediente
与给定的ID列表匹配。这可以通过。
SELECT
`id_receta`
FROM
`ingredients_recetas`
WHERE
`id_ingrediente` IN (89, 18);
答案 3 :(得分:0)
假设您要查找包含所有列出的成分(可能超过2个)的所有食谱,那么您可以执行以下操作。请注意,HAVING
子句应与要检查的成分数进行比较,IN
子句应包含所有成分的ID。
SELECT
ir.id_receta
FROM
INGREDIENTES_RECETAS ir
WHERE
ir.id_ingrediente IN (89, 18)
GROUP BY
ir.id_receta
HAVING
COUNT(*) = 2;
编辑
如果您想查找至少包含一种所列成分的所有食谱,请将最后一项更改为:
HAVING
COUNT(*) > 0;
并且......虽然这里的其他一些解决方案以不同的方式提供了这一点,但要查找所有具有所列成分的配方,请将最后一个条款更改为:
HAVING
COUNT(*) = 1;