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

रेल में WHERE क्लॉज में सभी ऑपरेटर

यह का मामला है ।

वास्तविक तालिका परिभाषाएं (मानक 1:n संबंध, रूबी ORM द्वारा छिपाई गई) कुछ इस तरह होगी:

CREATE TABLE instructor_student (
   id serial PRIMARY KEY
   name ...
);

CREATE TABLE fees (
   id serial PRIMARY KEY
 , instructor_student_id integer NOT NULL REFERENCES instructor_student
 , course_type ...
 , monthly_detail date
 , UNIQUE (instructor_student_id, course_type, monthly_detail)
);

एक प्रश्न पर आपका प्रयास प्रभावी ढंग से fees . में प्रत्येक एक पंक्ति का परीक्षण करने का प्रयास करता है दिए गए सरणी में कई मानों के विरुद्ध, जो हमेशा विफल रहता है जबकि सरणी के तत्व समान नहीं हैं। एक मान एकाधिक . के समान नहीं हो सकता अन्य मूल्य। आपको एक अलग दृष्टिकोण की आवश्यकता है:

SELECT instructor_student_id
FROM   fees
WHERE  course_type = ?
AND    monthly_detail = ANY(ARRAY[?]::date[])  -- ANY, not ALL!
GROUP  BY instructor_student_id
HAVING count(*) = cardinality(ARRAY[?]::date[]);

यह मान रहा है विशिष्ट आपकी सरणी में मान और आपकी तालिका शुल्क में अद्वितीय प्रविष्टियां जैसे UNIQUE . द्वारा लागू किया गया बाधा मैंने ऊपर जोड़ा। अन्यथा, गणना विश्वसनीय नहीं है और आपको अधिक परिष्कृत क्वेरी का उपयोग करना होगा। यहाँ विकल्पों का एक शस्त्रागार है:

जैसा कि आप देख सकते हैं, मैंने instructor_student तालिका को शामिल नहीं किया था बिल्कुल भी। जबकि रेफ़रेंशियल अखंडता एक FK बाधा के साथ लागू की जाती है (जैसा कि आमतौर पर होता है), हम fees के साथ काम कर सकते हैं केवल योग्यता निर्धारित करने के लिए instructor_student_id . यदि आपको मुख्य तालिका से अधिक विशेषताएँ प्राप्त करने की आवश्यकता है, तो इसे दूसरे चरण में करें, जैसे:

SELECT i.*  -- or whatever you need
FROM   instructor_student i
JOIN  (
   SELECT ...  -- query from above
   ) f ON f.instructor_student_id = i.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. प्राथमिक कुंजी के रूप में ईमेल पते का प्रयोग करें?

  2. एक सरणी के साथ एक तैयार बयान की आपूर्ति करें

  3. Postgresql पैरामीटरयुक्त क्वेरी के साथ COPY कमांड में बनाया गया है

  4. PostgreSQL द्वारा पेश किया गया JSONB की व्याख्या

  5. मैं Postgres 9.4 JSONB कॉलम में केस-असंवेदनशील खोज कैसे करूँ?