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

नेस्टेड दृश्यों का उपयोग करने से बचने के लिए मैं इस क्वेरी को कैसे सुधार सकता हूं?

आपके पास मौजूद डेटा से परिचित हों:

पहली महत्वपूर्ण बात यह समझना है कि आपके पास कौन सा डेटा है। यहाँ इस मामले में, आपके पास चार टेबल हैं

  • बीमा कंपनियां
  • रोगी
  • डॉक्टर
  • विज़िट

आपका लक्ष्य:

उन सभी रोगियों की सूची प्राप्त करें, जिन्होंने अपनी बीमा कंपनियों से जुड़े सभी आर्थोपेडिस्ट (विशेषज्ञ) का दौरा किया।

आइए एक कदम पीछे हटें और छोटे टुकड़ों में इसका विश्लेषण करें:

आम तौर पर, जब आप उन्हें समग्र रूप से देखते हैं तो आवश्यकताएं थोड़ी भारी हो सकती हैं। आइए आवश्यकताओं को छोटे घटकों में विभाजित करें ताकि यह समझ सकें कि आपको क्या करने की आवश्यकता है।

  1. एक भाग: आपको उन डॉक्टरों की सूची ढूंढनी होगी, जिनकी विशेषता 'ऑर्थोपेडिस्ट' है
  2. भाग ख: # 1 में पहचाने गए डॉक्टरों के पास जाने वाले रोगियों की सूची प्राप्त करें।
  3. भाग ग: एक ही बीमा कंपनी साझा करने वाले रोगियों और डॉक्टरों की सूची खोजने के लिए परिणाम #2 को फ़िल्टर करें।
  4. भाग घ: पता लगाएँ कि वे मरीज़ जो उन आर्थोपेडिस्ट . में से प्रत्येक के पास गए थे जो रोगी के समान बीमा कंपनी से संबंधित हों।

कैसे पहुंचें:

  1. आपको अपने मुख्य लक्ष्य की पहचान करने की आवश्यकता है, यहां इस मामले में रोगियों की सूची की पहचान करने के लिए। तो, पहले रोगी तालिका को क्वेरी करें।

  2. आपके पास मरीज हैं, वास्तव में वे सभी हैं लेकिन हमें यह पता लगाने की जरूरत है कि इनमें से कौन सा मरीज डॉक्टरों के पास गया। आइए इस बारे में चिंता न करें कि डॉक्टर हड्डी रोग विशेषज्ञ है या नहीं। हमें बस उन मरीजों और डॉक्टरों की सूची चाहिए जो उनके पास गए हैं। रोगी और चिकित्सक तालिका के बीच कोई मानचित्रण नहीं है। यह जानकारी जानने के लिए,

    सही कुंजी फ़ील्ड पर विज़िट तालिका के साथ रोगी तालिका में शामिल हों।

    फिर सही कुंजी फ़ील्ड पर डॉक्टर्स तालिका के साथ आउटपुट में शामिल हों।

  3. यदि आपने जोड़ सही ढंग से किया है, तो अब आपके पास उन सभी रोगियों और डॉक्टरों की सूची होनी चाहिए, जिनके पास वे गए हैं। यदि आपने LEFT OUTER JOIN का उपयोग किया है आपको ऐसे मरीज भी मिल जाएंगे जो कभी डॉक्टर के पास नहीं गए थे। अगर आपने RIGHT OUTER JOIN . का इस्तेमाल किया है , आपको केवल वही मरीज मिलेंगे जो डॉक्टर के पास गए थे।

  4. अब, आपके पास वे सभी मरीज और डॉक्टर हैं जिनके पास वे गए हैं। हालाँकि, आवश्यकता केवल उन डॉक्टरों को खोजने की है जो आर्थोपेडिस्ट . हैं . इसलिए, केवल वांछित परिणाम देने के लिए परिणाम को फ़िल्टर करने के लिए शर्त लागू करें।

  5. अब आपने भाग a . में छोटे घटकों में विभाजित करके आवश्यकताओं को प्राप्त कर लिया है और भाग ख . आपको अभी भी इसे बीमा कंपनियों द्वारा फ़िल्टर करने की आवश्यकता है। यहां मुश्किल हिस्सा है, आवश्यकता यह नहीं कहती है कि आपको बीमा कंपनी प्रदर्शित करने की आवश्यकता है, इसलिए हमें तालिका बीमा कंपनियों का उपयोग करने की आवश्यकता नहीं है। आपका अगला प्रश्न होगा 'How am I going to filter the results?' . वैध बिंदु। पता लगाएँ कि क्या तीन तालिकाओं में से कोई Patient , Doctor और Visits बीमा कंपनी की जानकारी शामिल करें। Patient और Doctor एक सामान्य क्षेत्र है। परिणाम फ़िल्टर करने के लिए उस सामान्य फ़ील्ड में शामिल हों।

  6. अद्वितीय ऑर्थोपेडिस्ट की संख्या का पता लगाएं जिसे प्रत्येक रोगी ने देखा है।

  7. यहां वह हिस्सा है जो कई तरीकों से किया जा सकता है, ऐसा करने का एक तरीका एक उप क्वेरी जोड़ना होगा जो आउटपुट में आपका चौथा कॉलम होगा। यह उप क्वेरी तालिका डॉक्टरों से पूछताछ करेगी और विशेषता ='ऑर्थोपेडिस्ट' द्वारा फ़िल्टर करेगी। उस फ़िल्टर के अलावा, आपको मुख्य क्वेरी पर मौजूद पेशेंट टेबल पर बीमा कंपनी आईडी के साथ आंतरिक टेबल पर बीमा कंपनी का मिलान करके भी फ़िल्टर करना होगा। यह सबक्वेरी बीमा कंपनी आईडी के लिए सभी हड्डी रोग विशेषज्ञों की गिनती लौटा देगी जो रोगी के डेटा से मेल खाती है।

  8. अब आपके पास patient id फ़ील्ड होनी चाहिए , patient name , patients visits count और total number of Orthopedists in same insurance company उप क्वेरी से। फिर आप एक बाहरी जुड़ाव जोड़ सकते हैं जो इस व्युत्पन्न तालिका के परिणामों को उन फ़ील्ड्स पर फ़िल्टर करेगा जहां patients visits count total number of Orthopedists in same insurance company . से मेल खाता है . मैं यह नहीं कह रहा हूं कि यह सबसे अच्छा तरीका है। यह एक ऐसा दृष्टिकोण है जिसके बारे में मैं सोच सकता हूँ।

  9. यदि आप उपरोक्त तर्क का पालन करते हैं, तो आपके पास यह होना चाहिए।

सभी डॉक्टरों के पास जाने वाले रोगियों की सूची

केवल उन डॉक्टरों द्वारा फ़िल्टर किया गया, जो हड्डी रोग विशेषज्ञ हैं

एक ही बीमा कंपनी की जानकारी साझा करने वाले रोगियों और डॉक्टरों द्वारा फ़िल्टर किया गया।

फिर से, पूरे आउटपुट को व्युत्पन्न तालिका आउटपुट के अंदर पाए जाने वाले दो गणना क्षेत्रों द्वारा फ़िल्टर किया जाता है।

गेंद आपके पाले में है:

  • इसे चरण दर चरण आज़माएं और जब आपको उत्तर मिल जाए। इसे यहां एक अलग उत्तर के रूप में पोस्ट करें। इस प्रश्न पर आपको मिले सभी डाउनवोट की भरपाई के लिए मैं इसे ऊपर उठाऊंगा।

मुझे विश्वास है कि आप इसे आसानी से कर सकते हैं।

अगर आप ठोकर खाते हैं...

अपने प्रश्नों को comments to this answer . के रूप में पोस्ट करने में संकोच न करें , अन्य और मुझे आपकी सहायता करने में खुशी होगी।

अस्वीकरण

मैंने कई तरीकों में से एक प्रदान किया है कि इस तर्क को कैसे लागू किया जा सकता है। मुझे यकीन है कि इसे बेहतर तरीके से लागू करने के कई तरीके हैं।

परिणाम:

वांछित आउटपुट उत्पन्न करने वाली सही क्वेरी के लिए कृपया @Ofek Ron का उत्तर देखें। मैंने प्रश्न का कोई भाग नहीं लिखा। यह सब ओपी का प्रयास था।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. com.mchange.v2.resourcepool.CannotAcquireResourceException:एक रिसोर्सपूल अपने प्राथमिक कारखाने या स्रोत से संसाधन प्राप्त नहीं कर सका

  2. #1025 - mysql में नाम बदलने में त्रुटि (त्रुटि:150)

  3. MySQL पासवर्ड फ़ंक्शन

  4. संग्रहीत प्रक्रिया जो MYSQL में 7 दिनों से अधिक पुरानी पंक्तियों को स्वचालित रूप से हटा देती है

  5. Group_concat का उपयोग करके मूल्यों को कैसे उद्धृत करें