Вернуть строки (идентификаторы), которые удовлетворяют и имеют оба значения в условии IN - PullRequest
0 голосов
/ 06 сентября 2018

У меня ниже table с образцами данных, называемыми Recipes, которые действуют как junction table между другими 2 tables.

Запрос -

select recipeId, IngredientId  from Recipes where IngredientId in (1,31) order by recipeId

Когда я execute выше SQL заявления, оно дает ниже Output., что хорошо.

enter image description here

Какие изменения мне нужно внести в запрос, чтобы подсвечиваться ниже Output.

enter image description here

Теперь, почему 6, 7 & 21?

Поскольку RecipeIds 6, 7 & 21 являются единственными Ids, которые имеют both IngrdientIds [i.e. 1,31]

1 Ответ

0 голосов
/ 06 сентября 2018

Вы можете использовать group by предложение:

select RecipeIds 
from table t
where IngrdientIds in (1, 31)
group by RecipeIds 
having count(distinct IngrdientIds) = 2;

Вы также можете использовать функцию min() & max():

having min(IngrdientIds) = 1 and max(IngrdientIds) = 31;
...