आप एक ही टेबल पर, दो बार, mysql में कैसे शामिल होते हैं?


110

मेरे पास 2 टेबल हैं। एक (डोमेन) में डोमेन आईडी और डोमेन नाम (dom_id, dom_url) होते हैं।

अन्य में वास्तविक डेटा है, जिनमें से 2 कॉलम के लिए TO और FROM डोमेन नाम की आवश्यकता होती है। तो मेरे पास 2 कॉलम हैं Rev_dom_from और Rev_dom_for, दोनों ही डोमेन नेम आईडी को डोमेन टेबल से स्टोर करते हैं।

सरल।

अब मुझे वास्तव में वेबपेज पर दोनों डोमेन नाम प्रदर्शित करने की आवश्यकता है। मुझे पता है कि LEFT JOIN डोमेन के माध्यम से एक या दूसरे को कैसे प्रदर्शित किया जाता है?

लेकिन मैं इसे DOM_rev_from कॉलम में 2nd डोमेन नाम से कैसे प्रतिध्वनित करूंगा?

mysql 

जवाबों:


166

आप इन लाइनों के साथ एक और जुड़ाव का उपयोग करेंगे:

SELECT toD.dom_url AS ToURL, 
    fromD.dom_url AS FromUrl, 
    rvw.*

FROM reviews AS rvw

LEFT JOIN domain AS toD 
    ON toD.Dom_ID = rvw.rev_dom_for

LEFT JOIN domain AS fromD 
    ON fromD.Dom_ID = rvw.rev_dom_from

संपादित करें :

आप जो कुछ भी कर रहे हैं वह कई बार तालिका में शामिल हो रहा है। पोस्ट में क्वेरी को देखें: यह समीक्षा तालिकाओं (rvw के रूप में उपनाम) से मानों का चयन करता है, वह तालिका आपको डोमेन तालिका (एक FOR और एक FROM) के लिए 2 संदर्भ प्रदान करती है।

इस बिंदु पर डोमेन तालिका को समीक्षा तालिका में शामिल करना छोड़ दिया जाना एक साधारण बात है। एक बार (के रूप में टॉड के रूप में उर्फ), और दूसरी बार (डीओडी से उर्फ ​​के रूप में)।

फिर सेलेक्ट सूची में, आप DOMAIN तालिका के दोनों अक्षरों से DOM_URL फ़ील्ड का चयन करेंगे, उन्हें डोमेन तालिका के संदर्भ में शामिल प्रत्येक के लिए तालिका उपनाम द्वारा संदर्भित करते हुए, और उन्हें TOURL और FromUrl के रूप में उपनाम दें।

SQL में aliasing के बारे में अधिक जानकारी के लिए, यहाँ पढ़ें ।


5
चाल यह है कि आपने प्रत्येक JOIN को 'AS' और 'AS से' नाम से पहचाना है ताकि आप उन्हें SELECT में उपयोग कर सकें।
मैथ्यू स्मिथ

1
तालिका नाम के लिए एक गैर कीवर्ड का उपयोग स्पष्ट होगा। इसके अलावा, अलियासिंग करते समय "as" कीवर्ड का उपयोग करें।
theSoftwareJedi

मुझे माफ कर दो, लेकिन मुझे अभी भी समझ में नहीं आया कि यह कैसे काम करना है। 2 तालिकाएँ हैं: डोमेन (dom_id, dom_url), और समीक्षाएं (Rev_id, rev_dom_from, rev_dom_for)। अगर कोई सटीक क्वेरी लिख सकता है, तो मुझे लगता है कि यह लटका हुआ है, यह बहुत अच्छा होगा, क्योंकि मुझे नहीं पता कि मुझे क्या संपादित करना है।

1
उपनाम को तालिका में नहीं, बल्कि तालिका में संदर्भित पंक्तियों के रूप में सोचें। सादृश्य द्वारा, एक लूप में जैसे "के लिए" (i = 0; मैं <अधिकतम; i ++) "वैरिएबल i एक पुनरावृत्त मूल्य है, यह लूप ही नहीं है।
बिल कार्विन

मुझे नहीं पता था कि आप SQL, Gracias में ऐसा कर सकते हैं।
एडम एफ।

8

निचे दी गयी सारणी ।।

Domain Table
dom_id | dom_url

Review Table
rev_id | rev_dom_from | rev_dom_for

इस sql को आज़माएं ... (स्टीफन राइटन ने ऊपर जो लिखा है, यह वही बात है) चाल यह है कि आप मूल रूप से एक ही क्वेरी में दो बार डोमेन तालिका से चयन कर रहे हैं और परिणाम जोड़ रहे हैं।

Select d1.dom_url, d2.dom_id from
review r, domain d1, domain d2
where d1.dom_id = r.rev_dom_from
and d2.dom_id = r.rev_dom_for

यदि आप अभी भी अटके हुए हैं, तो कृपया इसके साथ और अधिक विशिष्ट बनें क्योंकि यह आपको समझ में नहीं आता है।


-1

इसे पढ़ें और कोशिश करें, इससे आपको मदद मिलेगी:

तालिका एक

column11,column12,column13,column14

तालिका 2

column21,column22,column23,column24


SELECT table1.column11,table1.column12,table2asnew1.column21,table2asnew2.column21 
FROM table1 INNER JOIN table2 AS table2asnew1 ON table1.column11=table2asnew1.column21  INNER TABLE table2 as table2asnew2 ON table1.column12=table2asnew2.column22

table2asnew1 तालिका 2 का एक उदाहरण है जिसका मिलान किया जाता है table1.column11=table2asnew1.column21

तथा

table2asnew2 तालिका 2 का एक और उदाहरण है जिसका मिलान किया गया है table1.column12=table2asnew2.column22

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.