# Не могу составить sql запрос правильно

**URL:** <https://forum.itvdn.com/t/ne-mogu-sostavit-sql-zapros-pravilno/2861>\
**Category:** SQL\
**Created:** [24.11.2018 21:23:08 UTC](https://forum.itvdn.com/t/ne-mogu-sostavit-sql-zapros-pravilno/2861 "2018-11-24T21:23:08Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![realvovan99](https://forum.itvdn.com/letter_avatar_proxy/v4/letter/r/aeb1de/32.png) [@realvovan99](https://forum.itvdn.com/u/realvovan99)\
**Post date:** [24.11.2018 21:23:08 UTC](https://forum.itvdn.com/t/ne-mogu-sostavit-sql-zapros-pravilno/2861/1 "2018-11-24T21:23:08Z")

</div>

Есть база данных, в ней таблицы:

PRODUCT (id, name)

RECIPE (id, name, description, cooking\_time)

RESIPE\_PRODUCT (id, resipe\_id, product\_id, product\_weight)

COOKING\_METHOD (id, name)

RESIPE\_COOKING\_METHOD (id, recipe\_id, cooking\_method\_id)

Нужно получить рецепты по id продуктов и их массе, по времени приготовления и по способу приготовления. Как это сделать?

---

<div class="post-metadata">

**Author:** ![denisnifedov](https://forum.itvdn.com/letter_avatar_proxy/v4/letter/d/9d8465/32.png) [@denisnifedov](https://forum.itvdn.com/u/denisnifedov)\
**Post date:** [25.11.2018 10:10:37 UTC](https://forum.itvdn.com/t/ne-mogu-sostavit-sql-zapros-pravilno/2861/2 "2018-11-25T10:10:37Z")

</div>

Элементарно просто: вам нужен простой join запрос, не более того.

[https://itvdn.com/ru/video/sql-essential](https://itvdn.com/ru/video/sql-essential)

Ещё если в таблице RECIPE\_PRODUCT пара id уникальная, то из днной таблицы можно удалить искуственный ключ id и сделать целую пару одним primary key.

```
SELECT `recipe_id`, COUNT(*) AS `count`
  FROM `recipe_product`
  WHERE (`product_id` = 1 AND `product_weight` > 100)
    OR (`product_id` = 2 AND `product_weight` BETWEEN 200 AND 400)
    OR (`product_id` = 3 AND `product_weight` < 10)
  GROUP BY `recipe_id`
  HAVING `count` = 3
```

Вот ещё как вариант поиск рецептов в которые входят только указанные продукты:

```
SELECT `recipe_id`, COUNT(*) AS `count`
  FROM `recipe_product`
  WHERE `recipe_id` NOT IN (SELECT `recipe_id` FROM `recipe_product` WHERE `product_id` NOT IN (1, 2, 3))
    AND ((`product_id` = 1 AND `product_weight` > 100)
      OR (`product_id` = 2 AND `product_weight` BETWEEN 200 AND 400)
      OR (`product_id` = 3 AND `product_weight` < 10))
  GROUP BY `recipe_id`
  HAVING `count` = 3
```
