我想按现有子代检索父记录。
例如我有:
父母表:膳食
ID Meal 1 A 2 B 3 C
子表:成分
ID MealID Ingredient 1 1 x 2 1 y 3 1 z 4 2 x 5 2 y 6 3 x
我想检索所有具有成分x和y的餐食。查询应返回膳食A和B。 我不想使用诸如listagg或xmlagg之类的任何功能来将所有子名称都放在一列中,以后再使用LIKE。
非常感谢您的帮助。
谢谢。
答案 0 :(得分:1)
您可以使用聚合:
select mealid
from ingredients
where ingredient in ('x', 'y')
group by mealid
having count(*) = 2;
这假设一顿饭中没有重复配料。如果可以的话,您需要count(distinct ingredient) = 2
。
答案 1 :(得分:1)
您可以使用:
select m.meal
from Meal m
join Ingredients i on i.mealid = m.id
where i.Ingredient in ('x','y') --
group by m.meal --| => These two rows guarantees exactly returning of two rows with ingr. x & y
having count(*)>1; ---------------
MEAL
-----
A
B
编辑(取决于您的最新评论):
您可以使用存在从具有两种成分 X 和 Y 的孩子那里检索所有记录。 strong>如下:
select i.ID
from Ingredients i
where exists ( select 1
from Ingredients
where MealID = i.MealID
and i.Ingredient in ('x','y')
group by MealID
having count(*)>1
);
ID
--
1
2
4
5