i have 4 tabels
drinks, opskrifter, ingredients and stock
the tables consist of
drinks
- drink_id
- name
- beskriv
- glas
- image
- alcohol
opskrifter
- drink_id
- ingredient_id
- quantity
ingredients
- ingredient_id
- name
stock
- ingredient_id
- name
i want a query to select drinks that can be made in opskrifter of the ingredients in stock.
i have this working, but it only returns drink_id.
x
select o.drink_id
from opskrifter o
left join stock s on s.ingredient_id = o.ingredient_id
group by o.drink_id
having count(*) = count(s.ingredient_id)
I want it to return:
drink_id, name, beskriv, glas, image, alcohol
somebody help my on the way 🙂 thx
Advertisement
Answer
Basically you need to bring the drink
table. I would just use a join
for that, while turning the aggregate query to a subquery:
select d.*, o.cnt_ingredients
from drink d
inner join (
select o.drink_id, count(*) as cnt_ingredients
from opskrifter o
left join stock s on s.ingredient_id = o.ingredient_id
group by o.drink_id
having count(*) = count(s.ingredient_id)
) o on o.drink_id = d.drink_id