Найти значение, которое содержится во ВСЕХ строках таблицы

Мне нужно выбрать все значения, которые содержатся во ВСЕХ строках таблицы.
У меня есть таблица «Ингредиент» и ПродуктИнгредиент(там у меня есть рецепт продукта).
Ингредиент

| ingredient_id | name | price | 
| 1             | Bla  | 100   
| 2             | foo  | 50

ПродуктИнгредиент.

| Product_id | ingredient_id
| 1          | 1   
| 1          | 2   
| 2          | 1

Результат должен быть

|  1   |  Bla |  

как и во всех строках ProductIngredient.

SELECT DISTINCT Ingredient_Id 
FROM Ingredients I
WHERE Ingredient_Id = ALL
    (SELECT Ingredient_id FROM ProductIngredient PI
     WHERE PI.Ingredient_Id = I.Ingredient_Id );

Как исправить код, чтобы он работал?


person Artem Kopytko    schedule 27.11.2017    source источник
comment
Отредактируйте свой вопрос и предоставьте образцы данных и желаемые результаты. Формулировка вашего вопроса не ясна. Например, кажется, что вопрос касается одной таблицы, но пример кода ссылается на две.   -  person Gordon Linoff    schedule 28.11.2017
comment
Отмечайте правильно!!! Что это, MySQL или Postgres????? Не может быть обоих.   -  person Eric    schedule 28.11.2017


Ответы (1)


Это даст вам все ингредиенты из I, которые есть в PI для каждого продукта. Предполагается, что у каждого продукта нет нескольких строк для комбинации продукта и ингредиента.

SELECT I.Ingredient_Id 
FROM Ingredients I INNER JOIN ProductIngredient PI
     ON PI.Ingredient_Id = I.Ingredient_Id
GROUP BY I.Ingredient_Id
HAVING COUNT(*) >= (SELECT COUNT(DISTINCT Product_id) FROM ProductIngredient)
person clinomaniac    schedule 27.11.2017
comment
Да, но мне нужны только те ингредиенты из I, которые содержатся в каждом продукте (PI) - person Artem Kopytko; 28.11.2017
comment
Вы имеете в виду группу для каждого продукта? Или вам нужны ингредиенты, которые есть во всех продуктах? - person clinomaniac; 29.11.2017
comment
Да, ингредиенты, которые есть во всех продуктах (: - person Artem Kopytko; 29.11.2017
comment
Отредактировал ответ. Надеюсь это поможет. - person clinomaniac; 29.11.2017