Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SQL:किसी श्रेणी से उत्पाद प्राप्त करें, लेकिन श्रेणियों के दूसरे सेट में भी होना चाहिए

इस प्रकार की समस्या को संबंधपरक विभाजन . कहा जाता है ।

दो सामान्य समाधान हैं:

  1. पहला समाधान मेल खाने वाली श्रेणियों को एक साथ जोड़ता है और एक निश्चित स्ट्रिंग से तुलना करता है:

    SELECT p2c.product_id
    FROM oc_product_to_category p2c
    GROUP BY p2c.product_id
    HAVING GROUP_CONCAT(p2c.category_id SEPARATOR ',' ORDER BY p2c.category_id) = '1,2'
    
  2. दूसरा समाधान एक JOIN करता है प्रत्येक आवश्यक मान के लिए:

    SELECT p.product_id 
    FROM oc_product p 
    INNER JOIN oc_product_to_category p2c1 
      ON (p.product_id = p2c1.product_id AND p2c1.category_id = 1) 
    INNER JOIN oc_product_to_category p2c2 
      ON (p.product_id = p2c2.product_id AND p2c2.category_id = 2) 
    

मैं अपनी प्रस्तुति में इन समाधानों को शामिल करता हूं SQL क्वेरी पैटर्न, अनुकूलित . मैंने अपने परीक्षणों में पाया कि शामिल होने का समाधान प्रदर्शन के लिए बहुत बेहतर है।

@ टॉम का सुझाव सही है, यहाँ एक पूरी क्वेरी में यह कैसा दिखेगा:

    SELECT p.product_id, GROUP_CONCAT(p2c3.category_id SEPARATOR ',') AS categories
    FROM oc_product p 
    INNER JOIN oc_product_to_category p2c1 
      ON (p.product_id = p2c1.product_id AND p2c1.category_id = 1) 
    INNER JOIN oc_product_to_category p2c2 
      ON (p.product_id = p2c2.product_id AND p2c2.category_id = 2) 
    INNER JOIN oc_product_to_category p2c3
      ON (p.product_id = p2c3.product_id)
    GROUP BY p.product_id;

DISTINCT कि @Tom सुझाव आवश्यक नहीं होना चाहिए, क्योंकि आपकी p2c तालिका में एक UNIQUE बाधा (product_id, category_id) होनी चाहिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्थानीय कंप्यूटर पर MySQL57 सेवा शुरू हुई और फिर बंद हो गई

  2. वास्तविक क्वेरी प्रिंट करें MySQLdb चलता है?

  3. BLOB टेक्स्ट में किसी शब्द को MySQL से बदलें

  4. पाल-mysql स्कीमा डेटाटाइप्स

  5. mysql-अजगर स्थापना समस्याएं (मैक ओएस एक्स शेर पर)