यहां परिदृश्य है। REGEXP
का उपयोग IN
ऑपरेटर को अभी तक पर अनुकरण करने के लिए कैसे करें, दोनों तरफ स्ट्रिंग ऑर्डर के बावजूद दायीं तरफ दाएं तरफ सभी मानों से मेल करें। बाएं शामिल होने और उप प्रश्नों का उपयोग करके ANSI SQL
समाधान भी हासिल किया जा सकता है।आदेश के बावजूद किसी अन्य समूह सूची में किसी समूह स्ट्रिंग से मिलान करने के लिए REGEXP - SQL
नमूना तालिका:
Parent table, Child table, Parent_Child
। प्रश्न पर अधिक जगह न लेने के लिए, मैं केवल Group_Concat Child query by Parent
का पुन: प्रस्तुत करता हूं।
PID NAME CHILDREN
1 dad john dave,jill,lina
2 mum sandy maryam,jack
3 dad frank henry,jill
4 mum kate maryam
5 mum jean dave
अपेक्षित परिणाम: जनक का चयन करें जो अपने सभी बच्चों को है कुछ में भाग लिया।
PID NAME CHILDRENREXGEX
3 dad frank jill,henry
4 mum kate maryam
5 mum jean dave
यहाँ regexp एसक्यूएल समाधान है: अब यहां मुद्दा यह है, यह सही परिणाम वापस नहीं करता है, तो बाईं ओर आदेश/squence दाईं ओर से मेल नहीं।
क्वेरी:
- क्या सबसे अच्छा पैटर्न सही के उपयोगकर्ता परिभाषित सूची में बाईं ओर में सभी के नाम से मेल करने के लिए है:
select x.pid, x.name, x.children as childrenRexgex from (select p.pid, p.name, group_concat(c.name) as children from parent as p inner join parent_child as pc on p.pid = pc.pid join child as c on pc.cid = c.cid group by p.pid order by c.name) as x where 'dave,maryam,jill,henry' REGEXP x.children ;
इसलिए दो पहलुओं मैं प्रश्न के लिए सराहना करेंगे रहे हैं आदेश के बावजूद पक्ष?
REGEXP
का उपयोग करके प्राप्त किया गया प्रदर्शन क्या हो सकता है?
वास्तविक समस्या यह है कि बच्चों को अल्पविराम से अलग कॉलम नहीं होना चाहिए, लेकिन एक विस्तार तालिका होना चाहिए। यह प्रश्न देखें: [क्या डेटाबेस कॉलम में एक सीमित सूची को वास्तव में खराब करना है?] (Http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-डेटा-column- वास्तव में-वह-खराब) –