मैंने अभी इसके लिए एक PostgreSQL-विशिष्ट विकल्प पर काम किया है। यह एक हैक का एक सा है, और अपने स्वयं के पेशेवरों और विपक्ष और सीमाओं के साथ आता है, लेकिन यह काम करने लगता है और एक विशिष्ट विकास भाषा, प्लेटफॉर्म या पीजी चालक तक सीमित नहीं है।
पाठ्यक्रम की चाल एक एकल पैरामीटर के रूप में मानों की मनमानी लंबाई संग्रह को पारित करने का एक तरीका खोजने के लिए है, और डीबी को कई मूल्यों के साथ इसे पहचानना है। मेरे पास जो समाधान काम कर रहा है, वह संग्रह में मूल्यों से एक सीमांकित स्ट्रिंग का निर्माण करना है, उस स्ट्रिंग को एक पैरामीटर के रूप में पास करें, और स्ट्रिंग_टो_अरे () का उपयोग पोस्टग्रेक्यूएल के लिए आवश्यक कास्टिंग के साथ ठीक से उपयोग करने के लिए करें।
इसलिए यदि आप "फू", "ब्ला", और "एबीसी" को खोजना चाहते हैं, तो आप उन्हें एक साथ एक स्ट्रिंग में समेट सकते हैं: 'फू, ब्ला, एबीसी'। यहाँ सीधे एसक्यूएल है:
select column from table
where search_column = any (string_to_array('foo,blah,abc', ',')::text[]);
आप स्पष्ट रूप से स्पष्ट कास्ट को बदल देंगे जो आप चाहते थे कि आपका परिणामी मूल्य सरणी होना चाहिए - int, text, uuid, आदि और क्योंकि फ़ंक्शन एकल स्ट्रिंग मान ले रहा है (या दो मुझे लगता है, यदि आप सीमांकक को अनुकूलित करना चाहते हैं साथ ही), आप इसे तैयार विवरण में एक पैरामीटर के रूप में पारित कर सकते हैं:
select column from table
where search_column = any (string_to_array($1, ',')::text[]);
यह तुलनात्मक चीज़ों का समर्थन करने के लिए पर्याप्त लचीला है:
select column from table
where search_column like any (string_to_array('foo%,blah%,abc%', ',')::text[]);
फिर से, कोई सवाल नहीं यह एक हैक है, लेकिन यह काम करता है और आपको अभी भी पूर्व-संकलित तैयार कथनों का उपयोग करने की अनुमति देता है जो सुरक्षा और साथ (शायद) प्रदर्शन लाभ के साथ * अहम * असतत पैरामीटर लेते हैं। क्या यह उचित है और वास्तव में प्रदर्शनकारी है? स्वाभाविक रूप से, यह निर्भर करता है, जैसा कि आपने स्ट्रिंग पार्सिंग प्राप्त की है और संभवतः आपकी क्वेरी से पहले भी चल रहा है। यदि आप तीन, पांच, कुछ दर्जन मान भेजने की उम्मीद कर रहे हैं, तो निश्चित रूप से, यह शायद ठीक है। कुछ हजार? हाँ, शायद इतना नहीं। YMMV, सीमाएं और बहिष्करण लागू होते हैं, कोई वारंटी एक्सप्रेस या निहित नहीं है।
लेकिन यह काम करता है।