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

ActiveRecord:उन माता-पिता को कैसे खोजें जिनके सभी बच्चे एक शर्त से मेल खाते हैं?

arel का उपयोग करना आपको काफी दूर ले जा सकता है। मुश्किल हिस्सा यह है कि आप arel . का उपयोग करके अपनी पूरी क्वेरी कैसे नहीं लिखते हैं का अपना क्वेरी सिंटैक्स?

यहां एक तरकीब है:where . का उपयोग करके अपनी क्वेरी बनाते समय , यदि आप arel . का उपयोग करते हैं शर्तों, आपको कुछ अतिरिक्त तरीके मुफ्त में मिलते हैं। उदाहरण के लिए, आप .exists.not . के साथ अपने पास मौजूद सबक्वेरी को टेल कर सकते हैं , जो आपको एक (NOT ( EXISTS (subquery))) . मिलेगा माता-पिता के where में टॉस करें -क्लॉज और आप तैयार हैं।

सवाल यह है कि आप शामिल तालिकाओं का संदर्भ कैसे देते हैं? इसके लिए आपको एरल चाहिए। आप कर सकते थे Arel के where का उपयोग करें इसकी बदसूरत स्थितियों जैसे a.eq b . के साथ . लेकिन क्यों? चूंकि यह समानता की स्थिति है, इसलिए आप इसके बजाय रेल की शर्तों का उपयोग कर सकते हैं! आप उस तालिका का संदर्भ दे सकते हैं जिसे आप हैश कुंजी से क्वेरी कर रहे हैं, लेकिन दूसरी तालिका के लिए (बाहरी क्वेरी में) आप इसके arel_table का उपयोग कर सकते हैं . इसे देखें:

parents = Parent.arel_table
Parent.where('NOT EXISTS (?)',
  Child.where(parent_id: parents[:id], other_parent_id: nil)
)

आप स्ट्रिंग्स का थोड़ा सहारा लेकर और इस तथ्य पर भरोसा करके एरल के उपयोग को कम कर सकते हैं कि आप रेल के where के पैरामीटर के रूप में सबक्वायरी में फीड कर सकते हैं। . इसका बहुत अधिक उपयोग नहीं है, लेकिन यह आपको एरेल के तरीकों में बहुत अधिक खुदाई करने के लिए मजबूर नहीं करता है, इसलिए आप उस ट्रिक या अन्य SQL ऑपरेटरों का उपयोग कर सकते हैं जो एक सबक्वेरी लेते हैं (क्या कोई अन्य भी हैं?):

parents = Parent.arel_table
Parent.where('NOT EXISTS (?)',
  Child.where(parent_id: parents[:id], other_parent_id: nil)
)

यहाँ दो मुख्य बिंदु हैं:

  • आप उसी तरह सबक्वायरी बना सकते हैं जैसे आप नियमित क्वेरी बनाने के लिए उपयोग किए जाते हैं, बाहरी क्वेरी की तालिका को एरेल के साथ संदर्भित करते हुए। यह एक वास्तविक तालिका भी नहीं हो सकती है, यह एक उपनाम हो सकती है! पागल सामान।
  • आप रेल के लिए पैरामीटर के रूप में सबक्वेरी का उपयोग कर सकते हैं where विधि ठीक है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Createuser:डेटाबेस पोस्टग्रेज से कनेक्ट नहीं हो सका:FATAL:रोल टॉम मौजूद नहीं है

  2. अस्थायी कुंजी को लागू करने के लिए PostgreSQL, ट्रिगर और समवर्ती

  3. Postgresql में, दो स्तंभों के संयोजन पर अद्वितीय बल दें

  4. कैसे घड़ी_टाइमस्टैम्प () PostgreSQL में काम करता है

  5. PostgreSQL में मौजूदा टेबल के लिए क्रिएट टेबल sql स्टेटमेंट कैसे जनरेट करें?