SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.08.2011 19:49:20

kwoon
Участник
Зарегистрирован: 02.08.2011
Сообщений: 2

Сложные запрос с использованием связи многие ко многим

Имеются:
- таблица с рецептами recipes (id, title)
- таблица с продуками products (id, name)
- таблица, которая представляет связь многие ко многим, recipe_products (recipe_id, product_id)

Вопрос: если даны id-шники продуктов, как с помощью одного запроса вытянуть только те рецепты, в которых содержатся данные продукты?

На первый взгляд запрос кажется очевидным, но я уже сутки над ним сижу... Помогите, пожалуйста. Заранее благодарен.

Неактивен

 

#2 02.08.2011 20:59:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сложные запрос с использованием связи многие ко многим

select r.title from products p join recipe_products rp on r.id=rp.recipe_id join recipes `r` on rp.product_id=r.id where p.id in (id-шники продуктов);  -- рецепты, в которых содержится любой из заказанных продуктов


select r.title from products p join recipe_products rp on r.id=rp.recipe_id join recipes `r` on rp.product_id=r.id where p.id in (id-шники продуктов) group by r.title having count(p.id)= кол-во id-шников продуктов; -- рецепты, в которых содержится все заказанные продукты

Неактивен

 

#3 02.08.2011 21:39:19

kwoon
Участник
Зарегистрирован: 02.08.2011
Сообщений: 2

Re: Сложные запрос с использованием связи многие ко многим

Большое спасибо! Очень помогло. Мне нужен был именно второй вариант. Видно, что писали по-быстрому с головы, так что если кому-нибудь надо, то вот рабочий вариант:

select r.id
from recipies r
join recipe_products rp on rp.recipe_id = r.id
join products p on p.id = rp.product_id
where p.id in (id-шники продуктов)
group by r.id
having count(p.id) = кол-во id-шников продуктов

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson