2013-10-13 7 views
11

यह मेरा काम नहीं है, मुझे अभी भी एसक्यूएल का बहुत ही कम ज्ञान है, मेरा सवाल यह है कि इस समस्या से कैसे संपर्क करें इस पर दिशानिर्देश प्राप्त करें। मुझे उम्मीद है कि प्रश्न बहुत सामान्य या अर्थहीन नहीं है:किसी अन्य तालिका से संदर्भित मान कैसे प्राप्त करें?

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

enter image description here

अब, मैं एक गतिशील रिपोर्ट है कि तालिका जहां मैं वास्तविक मूल्यों और न संदर्भ प्राप्त करने की आवश्यकता के लिए अंक पर काम कर रहा हूँ।

जैसा कि मैंने कहा, मेरी समस्या यह है कि उस विशेष तालिका में उन प्रीसेट मानों पर मैं काम कर रहा हूं, id_references (id_Country, id_Customer, ..) हैं, जबकि मुझे उनके द्वारा प्रस्तुत वास्तविक मूल्य की आवश्यकता है। वास्तविक मूल्य प्राप्त करने के लिए मुझे क्या करना चाहिए? अगर मैं अपनी रिपोर्ट को विभिन्न तालिकाओं पर इंगित करता हूं तो मैंने रिकॉर्ड के बीच अर्थ/लिंक खो दिया है।

+6

यदि आपके पास अभी तक नहीं किया गया है, [जॉइन की] पर पढ़ें (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html)। आपके विशेष मामले में आपको सभी आवश्यक लुक-अप टेबल पर अपनी "मुख्य" तालिका 'इनर जॉइन' करने की आवश्यकता होगी। –

+0

@ PM77-1 संदर्भ के लिए धन्यवाद। अब पढ़ने पर कूदते हुए। – FeliceM

+4

यदि आप बुनियादी जॉइन में प्रवीणता प्राप्त करना चाहते हैं, तो मैं [SQLZoo] (http://sqlzoo.net/wiki/The_JOIN_operation) अभ्यासों के माध्यम से जाने का सुझाव देता हूं। और यदि आपको अभी भी समस्याएं हैं, तो आप जो भी कोशिश कर रहे हैं और यह आपके लक्ष्यों को पूरा नहीं करता है, उसे वापस दिखाने के लिए स्वतंत्र महसूस करें। –

उत्तर

13

उदाहरण के लिए यदि आप इस परियोजना में अपने प्रश्न में दिखाया गया तालिका में country_id का उपयोग करके एक देश का नाम पाने के लिए कोशिश कर रहे हैं, आप

SELECT C.CountryName_Colummn, C.SomeOtheColumn, ...... 
FROM Projects P INNER JOIN Countries C 
ON P.id_Country = C.id_Country 
WHERE SomeColum = 'Your Condition' 

1) का चयन करें खण्ड की तरह कुछ कर सकता है कॉलम में जरूरत का चयन आपका परिणाम सेट
2) आप से तालिका (ओं) का नाम उल्लेख करें
3) खंड पर आप तालिकाओं के बीच संबंध परिभाषित करते हैं कहें प्रोजेक्ट टेबल में कॉलम id_Country था जो देश तालिका में id_Country को संदर्भित करता है, इन दो तालिकाओं के बीच संबंध परिभाषित करता है।
4) कॉलम सूची का चयन करने के बाद, डेटा का स्रोत (टेबल), उनके रिश्ते (क्लॉज पर), फिर आप अपनी क्वेरी से लौटने वाली पंक्तियों की संख्या फ़िल्टर कर सकते हैं, जैसे आप id_Country
जैसे कुछ कर सकते हैं C.CountryName = 'यूके' केवल यूके से परिणाम लौटाएगा।
5) क्लॉज में पत्र 'सी' और 'पी' उपनाम हैं इसलिए हमें फिर से पूर्ण तालिका नाम टाइप करने की आवश्यकता नहीं है, हमारे कोड को पढ़ने और डीबग करने में आसान और आसान बनाता है।

कोई फर्क नहीं पड़ता कि आवश्यक डेटा प्राप्त करने के लिए आपको कितनी तालिकाओं में शामिल होना है जब तक कि आप अपनी क्वेरी में तालिका के बीच संबंध को परिभाषित कर सकें, इसे ठीक काम करना चाहिए। एसक्यूएल सर्वर शायद ही कभी आपको एक टेबल में सभी आवश्यक डेटा मिलेंगे, सामान्यतः आप 2-3 टेबल या अधिक टेबल में शामिल होंगे। उदाहरण के लिए यदि आप कुछ डेटा है कि 3 अलग तालिकाओं में मौजूद है तो आप उन्हें इस तरह तीनों एक में क्वेरी कुछ में शामिल हो जाएगा ...

SELECT C.CountryName_Colummn, C.SomeOtheColumn, ...... 
FROM Projects P INNER JOIN Countries C 
ON P.id_Country = C.id_Country 
INNER JOIN Table_3_Name T3 
ON T3.CommonColumn = P.SomeCommonColumn (it will be a common column between table 3 and Projects OR Countries) 
WHERE SomeColum = 'Your Condition' 

चाहते लेकिन क्या तुम सच में में देखने की जरूरत है मिलती है के रूप में आप के विभिन्न प्रकार के कर सकते हैं टेबल के बीच जुड़ता है, इस उदाहरण में हेर्स मैंने इनर जॉइन का उपयोग किया जो इन सभी तालिकाओं के बीच केवल मिलान पंक्तियों को लौटाता है, आप बाएं जॉइन या दाएं जॉइन कर सकते हैं।
बाएं जॉइन जॉइन कुंजी शब्द के बाईं ओर तालिका से सभी पंक्तियों को लौटाता है और केवल अन्य तालिकाओं से मेल खाने वाली पंक्तियां देता है।
सही जॉइन जॉइन कुंजी शब्द के दाईं ओर से सभी पंक्तियों को लौटाता है और केवल अन्य तालिकाओं से पंक्तियों को झुकाता है।केवल वांछित कॉलम

Select customers.customer_name, Products.Product_type, Manufacturers.Manuf_name 
from Projects inner join customers 
on  customers.cust_id= Projects.proj_cust_id 
inner join Products 
on  Products.prod_id= Projects.proj_prod_id 
inner join Manufacturers 
on  Manufacturers.man_id= Projects.proj_man_id 

बनाना उर्फ ​​के उपयोग आप ठीक उसी reuslt दे देंगे साथ

प्रश्नों लेकिन कोड भी इस कोशिश को पढ़ने के लिए आसान ....

Select C.customer_name, Prod.Product_type, M.Manuf_name 
from Projects Proj inner join customers C 
on  C.cust_id= Proj.proj_cust_id 
inner join Products Prod 
on  Prod.prod_id= Proj.proj_prod_id 
inner join Manufacturers M 
on  M.man_id= Proj.proj_man_id 
+0

क्योंकि मेरे पास उन तालिकाओं में से 3 स्थित हैं जिनके लिए एक ही टेबल पर आंतरिक जुड़ने (प्रोड, कट, मैन) की आवश्यकता होती है, क्या मुझे 3 प्रश्न (चयन के साथ शुरू करना चाहिए, या उन सभी को गठबंधन करना चाहिए? – FeliceM

+0

लेकिन मुझे लगता है कि आप वास्तव में थोड़ा सा अध्ययन करने की ज़रूरत है और यह वास्तव में कठिन नहीं है, अगर आप भविष्य में एसक्यूएल पर काम करेंगे तो आपको वास्तव में शामिल होने की अच्छी समझ प्राप्त करने की आवश्यकता है क्योंकि मैं पिछले साल एक प्रश्न के बारे में सोच नहीं सकता था या जिसमें सभी डेटा मुझे एक टेबल में था :) –

+0

यह दिया जाता है। मैं इसका अध्ययन करने में व्यस्त हूं। धन्यवाद। – FeliceM

संबंधित मुद्दे