Daha önceki mesajlarda yazıldığı üzre öncelikle product tablosu ile category tablosunu ilişkilendirmek için üçüncü bir tabloya ihtiyaç var. Buna product_category diyelim.
Aşağıdaki resimde örnek olarak tabloyu bir kaç girişle doldurdum.
Resimden de görüleceği üzere bir ürün birden fazla kategoriye eklenmiş durumda. product_category tablosu inner join ile product tablosuna bağlanacak.
SELECT product_category.product_id from (
(select * from product_category where product_category.category_id=5 or product_category.category_id=6
union
select * from product_category where product_category.category_id=83 or product_category.category_id=84)
) AS product_category
inner join product on product.product_id=product_category.product_id
where product_category.product_id in(select product_category.product_id from product_category where product_category.category_id=4)
GROUP BY product_category.product_id HAVING count(*) >= 2;
Sorgu Açıklaması:
Öncelikle or içeren iki sorguyu union ile birleştiriyoruz.
Elde ettiğimiz sonucu inner join ile product tablosuna bağlıyoruz.
Daha sonra tekli sorguyu da ilave ediyoruz.
Sonunda da birden fazla sonuç dönmemesi için grupluyoruz.
Bu istenileni karşılıyor . 1 ve 5 id li ürünleri döndürüyor. Fakat sorgu ne kadar efektif ve performans gösterir mi bilemiyorum. Belki farklı bir mantıkla daha iyi olur. Onu da ustalara bırakalım