SELECT cat_id
FROM (
SELECT DISTINCT cat_id
FROM cat_product
) cpo
WHERE EXISTS
(
SELECT NULL
FROM cat_product cpi
WHERE cpi.cat_id = cpo.cat_id
AND product_id IN (2, 3)
LIMIT 1, 1
)
आपके पास एक UNIQUE
होना चाहिए (cat_id, product_id)
. पर अनुक्रमणिका (इस क्रम में) तेजी से काम करने के लिए।
यह समाधान INDEX FOR GROUP BY
का उपयोग करेगा विशिष्ट श्रेणियों की सूची प्राप्त करने के लिए, और EXISTS
विधेय COUNT(*)
. से थोड़ा तेज होगा (चूंकि एकत्रीकरण के लिए कुछ ओवरहेड की आवश्यकता होती है)।
यदि आपके पास खोजने के लिए दो से अधिक उत्पाद हैं, तो पहले तर्क को LIMIT
. में समायोजित करें तदनुसार।
यह LIMIT n - 1, 1
होना चाहिए , जहां n
IN
. में मदों की संख्या है सूची।
अपडेट करें:
सूची से सभी उत्पादों को रखने वाली श्रेणियों को वापस करने के लिए और कुछ नहीं, इसका उपयोग करें:
SELECT cat_id
FROM (
SELECT DISTINCT cat_id
FROM cat_product
) cpo
WHERE EXISTS
(
SELECT NULL
FROM cat_product cpi
WHERE cpi.cat_id = cpo.cat_id
AND product_id IN (2, 3)
LIMIT 1, 1
)
AND NOT EXISTS
(
SELECT NULL
FROM cat_product cpi
WHERE cpi.cat_id = cpo.cat_id
AND product_id NOT IN (2, 3)
)