Соответствует только если все элементы столбца находятся в другой таблице - PullRequest
0 голосов
/ 14 декабря 2018

Я создал небольшую базу данных в SQL, которая в виде 2 таблиц Product (Name, Ingredient и Available (Ingredient):

|     Product         | Available  |
|  Name  | Ingredient | Ingredient |
|   1    |      a     |      a     |
|   1    |      b     |      c     |
|   2    |      a     |
|   2    |      c     |

Мне нужно имяпродукта, только если ВСЕ его ингредиенты находятся внутри таблицы Available.
Для предыдущего примера результат должен быть: Product "2", а не Product "1", потому что у меня нетингредиент "b" в таблице Available.

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Вы можете попробовать что-то вроде этого также:

WITH TEMP_PRODUCTS AS
(
    SELECT NAME, COUNT(1) AS NUMBER_OF_INGREDIENTS
      FROM PRODUCT
  GROUP BY PRODUCT
)
SELECT PRD.NAME, COUNT(1) AS NUMBER_OF_AVAILABLE_INGREDIENTS
  FROM PRODUCT PRD
  JOIN TEMP_PRODUCTS TMP ON PRD.NAME = TMP.NAME
 WHERE EXISTS (SELECT 1 
                 FROM INGREDIENT ING
                WHERE ING.INGREDIENT = PRD.INGREDIENT)
 GROUP BY PRD.NAME
 HAVING COUNT(1) = TMP.NUMBER_OF_INGREDIENTS;
0 голосов
/ 14 декабря 2018

Вы можете попробовать с помощью left join (чтобы выяснить, какие Products не нужны Ingredients) и group by + having для фильтрации Products, в которых есть хотя бы один пропущенный Ingredient:

select p.Name 
from Products p 
left join Available a on a.Ingredient = p.Ingredient
group by p.Name
having sum(a.Ingredient is null) = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...