2008-10-14 12 views
92

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

दूसरे में वास्तविक डेटा है, जिसमें से 2 कॉलम को डोमेन नामों से TO और FROM की आवश्यकता होती है। तो मेरे पास 2 कॉलम rev_dom_from और rev_dom_for हैं, जिनमें से दोनों डोमेन तालिका से डोमेन नाम आईडी संग्रहीत करते हैं।

सरल।

अब मुझे वास्तव में वेबपृष्ठ पर दोनों डोमेन नाम प्रदर्शित करने की आवश्यकता है। मैं जानता हूं कि बाएं जॉइन डोमेन के माध्यम से reviews.rev_dom_for = domains.dom_url क्वेरी पर एक या दूसरे को कैसे प्रदर्शित किया जाए, और फिर आप dom_url को गूंजते हैं, जो rev_dom_for कॉलम में डोमेन नाम को प्रतिबिंबित करेगा।

लेकिन मैं dom_rev_from कॉलम में दूसरे डोमेन नाम को कैसे प्रतिबिंबित करूं?

उत्तर

139

आप उपयोग करेंगे एक और शामिल हो, इन पंक्तियों के साथ कुछ:

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 

संपादित: कई बार

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

इस बिंदु पर समीक्षा तालिका में डोमेन तालिका में शामिल होने के लिए यह एक साधारण बात है। एक बार (TOD के रूप में उपनाम) के लिए, और दूसरी बार (से डी के रूप में उपनाम) से।

फिर चयन सूची में, आप डोमेन तालिका के दोनों बाएं जॉइन से DOM_URL फ़ील्ड्स का चयन करेंगे, डोमेन तालिका के संदर्भ में प्रत्येक के लिए तालिका उपनाम द्वारा संदर्भित करते हैं, और उपनाम उन्हें ToURL और FromUrl के रूप में संदर्भित करते हैं।

एसक्यूएल में एलियासिंग के बारे में अधिक जानकारी के लिए, here पढ़ें।

+5

चाल के अनुरूप है तालिका 2 का एक और उदाहरण है, ताकि आप उपयोग कर सकते हैं 'से के रूप में' 'के रूप में करने के लिए' की पहचान की है प्रत्येक एक नाम के साथ शामिल हों और वह यह है कि उन्हें चयन में। तालिका नाम के लिए गैर कीवर्ड का उपयोग करके – MattSmith

+1

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

+0

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

7

को देखते हुए निम्न तालिकाओं ..

Domain Table 
dom_id | dom_url 

Review Table 
rev_id | rev_dom_from | rev_dom_for 

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

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

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

Table1

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 जो table1.column11=table2asnew1.column21 के अनुरूप है तालिका 2 का एक उदाहरण है

और

table2asnew2 जो table1.column12=table2asnew2.column22

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