你好(我是这个领域的菜鸟),我有一个MySQL数据库,它有下一个表:
所以有三个表,一个叫"INGREDIENTES“,里面有配料,另一个叫"RECETAS”,里面有食谱。我连接这两个表的方式是使用一个名为"INGREDIENTES_RECETAS",的表--这个表有一个复合主键"id_ingrediente + id_receta",因为一个菜谱可能有数目未知的成分。
问题是,我不知道如何通过许多未知的"id_ingrediente“ids过滤菜谱。
我在想这样的事情:
SELECT id_receta FROM INGREDIENTES_RECETAS WHERE id_ingrediente CONTAINS (89 AND 18);我想解决这个问题,避免使用PL/ SQL,只使用SQL。有可能吗?
我在一个java应用程序中使用这个程序,所以如果有一种编程的方法,它也会解决这个问题。
如果我必须使用PL/SQL,如何使用jdbc驱动程序在java中调用“过程”?
谢谢你的帮助。
发布于 2018-02-21 14:01:50
假设你想找到所有的食谱,其中包含所有列出的成分(可能超过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;发布于 2018-02-21 13:08:41
如果您正在寻找同时包含成分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;发布于 2018-02-21 13:04:42
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); https://stackoverflow.com/questions/48906568
复制相似问题