क्या कोई फ़ंक्शन या ऑपरेटर है या अन्यथा साधारण (आर) ऑरैकल एसक्यूएल में दो ट्यूपल अक्षरों के चौराहे को प्राप्त करने के लिए सरल है?ओरेकल एसक्यूएल: इंटरसेक्ट ट्यूपल लिटल
को ध्यान में निम्न उदाहरण ले रहा है:
निम्न तालिका
------------------------------
TABLE sometable
------------------------------
id | telephone | mobile | fax
------------------------------
1 | 123 | 456 | 789
n संख्या {n1, एन 2, n3, ..., n} खोज आईडी की एक सूची को देखते हुए बीत रहा है , जैसे कि:
telephone = n1 or mobile = n1 or fax = n1
or telephone = n2 or mobile = n2 or fax = n2
or telephone = n3 or mobile = n3 or fax = n3
....
or telephone = n or mobile = n or fax = n
दो प्रशंसनीय समाधान हैं:
1. समाधान 1
SELECT id FROM sometable
WHERE
n1 IN (telephone, mobile, fax)
OR n2 IN (telephone, mobile, fax)
OR n3 IN (telephone, mobile, fax)
....
OR n IN (telephone, mobile, fax)
;
2. समाधान 2
SELECT id FROM sometable
WHERE
telephone IN (n1, n2, n3, ..., n)
OR mobile IN (n1, n2, n3, ..., n)
OR fax IN (n1, n2, n3, ..., n)
;
लेकिन वहाँ एक समारोह/ऑपरेटर निम्न करने के लिए है?
SELECT id
FROM sometable
WHERE
intersect_function
(
(telephone, mobile, fax),
(n1, n2, n3, ..., n)
)
= TRUE
;
एक वैकल्पिक, सरल निर्माण का स्वागत किया जा सकता है, को ध्यान में ले जा रहा है कि इस हालत अधिक संख्या में और संभवतः अधिक जटिल परिस्थितियों के साथ एक लंबे समय तक क्वेरी का हिस्सा है।
धन्यवाद।
फिर एक छोटे से regexp चाल आप बना सकते हैं के साथ, एक ही पंक्ति से, प्रति मान एक पंक्ति है, और उन्हें अपनी मेज के खिलाफ मेल खाते हैं:
'चयन regexp_substr ('123, 456', '\ d +', 1, स्तर) n दोहरी से regexp_instr से कनेक्ट ('123, 456', '\ d +', 1, स्तर)! = 0' बहुत उपयोगी है। एक बार जब आप इसे एक टेबल में तोड़ते हैं तो संभावनाएं असंख्य होती हैं। मैंने देखा है कि एक दिलचस्प बात यह है कि क्वेरी की लागत तय होती है जबकि समाधान 1 और 2 लागत समान होती है और भिन्न होती है। – fluxy