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

AND और OR . का उपयोग करके क्वेरी के साथ कई पंक्तियों को पुनः प्राप्त करें

यह संबंधपरक विभाजन का मामला है:

SELECT c.id, c.name
FROM   components_componentproperty cp1
JOIN   components_componentproperty cp2 USING (component_id)
JOIN   components_component         c   ON c.id = cp1.component_id
WHERE  cp1.property_id = 9102  AND cp1.value IN ('4015', '4016')
AND    cp2.property_id = 8801  AND cp2.value = '3'
AND    c.type_id = 3832
GROUP  BY c.id;

हमने यहां प्रासंगिक तकनीकों का एक शस्त्रागार इकट्ठा किया है:

बड़ी संख्या में प्रॉपर्टी की जांच करें

आप उपरोक्त क्वेरी का विस्तार कर सकते हैं और गुणों से भरे हाथ के लिए यह सबसे तेज़ संभव समाधानों में से एक होगा। बड़ी संख्या के लिए इस मार्ग पर जाना अधिक सुविधाजनक (और तेज़ होना भी शुरू) होगा:

5 संपत्तियों के लिए उदाहरण, आवश्यकतानुसार विस्तृत करें:

SELECT c.id, c.name
FROM  (
   SELECT id
   FROM  (
      SELECT component_id AS id, property_id  -- alias id just to shorten syntax
      FROM   components_componentproperty
      WHERE  property_id IN (9102, 8801, 1234, 5678, 9876)  -- expand as needed
      GROUP  BY 1,2
      ) cp1
   GROUP  BY 1
   HAVING count(*) = 5  -- match IN expression
   ) cp2
JOIN   components_component c USING (id);

आंतरिक सबक्वेरी का अतिरिक्त चरण cp1 केवल आवश्यक है, क्योंकि आपके पास स्पष्ट रूप से प्रति (component_id, property_id) में एकाधिक प्रविष्टियां हैं components_componentproperty . में . हम कर सकते थे गुना cp1 और cp2 एक में और जांचें

HAVING count(DISTINCT property_id) = 5

लेकिन मुझे उम्मीद है कि यह अधिक महंगा होगा, क्योंकि count(DISTINCT col) प्रति पंक्ति one एक प्रकार के ऑपरेशन की आवश्यकता है ।

बहुत लंबी सूचियों के लिए IN एक बुरा विकल्प है। विचार करें:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अपाचे एयरफ्लो में पोस्टग्रेज एसक्यूएल लागू करना

  2. क्या PostgreSQL में फ़ाइलों को संग्रहीत करने में प्रदर्शन समस्याएँ हैं?

  3. PostgreSQL 9.3 . का उपयोग करके डायनामिक पिवट क्वेरी

  4. Google क्लाउड पर Kubernetes में Postgres डेटाबेस का बैकअप कैसे लें?

  5. PostgreSQL संग्रहीत प्रक्रियाओं को सीखने का सबसे अच्छा तरीका?