Karena resep dapat menggunakan beberapa bahan dan Anda mencari resep yang menggunakan satu atau lebih bahan yang ditentukan, Anda harus menggunakan DISTINCT
kata kunci untuk mencegah hasil duplikat di mana resep menggunakan lebih dari satu bahan dari daftar yang ditentukan. Anda juga dapat menggunakan IN
klausa untuk memfilter beberapa ID bahan.
select DISTINCT r.name
from
recipes r
inner join ingredient_index i
on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5);
Atau, jika Anda mencari resep yang menggunakan semua bahan yang ditentukan dalam daftar, Anda dapat mengelompokkan hasilnya berdasarkan nama resep dan memeriksa apakah jumlah catatannya sama dengan jumlah bahan dalam daftar Anda.
select r.name
from
recipes r
inner join ingredient_index i
on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5)
GROUP BY r.name
HAVING COUNT(*) = 2
Ini dengan asumsi bahwa tidak akan ada catatan duplikat dengan tupel (recipe_id, ingredients_id) yang sama (lebih baik dipastikan dengan batasan UNIK).