2 तालिकाओं की तरह नीचेमाइस्क्ल इनर या शर्त के साथ शामिल हो?
location_distance
----------------------------------------------
id | fromLocid | toLocid | distance
----------------------------------------------
1 | 3 | 5 | 70
2 | 6 | 8 | 15
3 | 2 | 4 | 63
...
other_table
--------------------------------------------
Id | fromLocid | toLocid | otherdata
--------------------------------------------
12 | 5 | 3 | xxxx
22 | 2 | 4 | xxxx
56 | 8 | 6 | xxxx
78 | 3 | 5 | xxxx
मैं दूरी पुनः प्राप्त करने के प्रत्येक पंक्ति के लिए other_table में स्थानों डब्ल्यू/b करना चाहते हैं। यहां मैंने कोशिश की है कि मैंने
SELECT ot.*, ld.distance FROM other_table AS ot
INNER JOIN location_distance ld ON ld.fromLocid = ot.fromLocid AND ld.toLocid = ot.toLocid
यह स्थान पंक्तियों को वापस नहीं करता है यदि स्थान मान इसके विपरीत हैं। अपेक्षित परिणाम उत्पन्न करने के लिए उपरोक्त क्वेरी को मैं कैसे लिख सकता हूं? क्या मुझे शामिल होने वाले खंड पर या स्थिति शामिल करनी चाहिए? नीचे की तरह?
SELECT ot.*, ld.distance FROM other_table AS ot
INNER JOIN location_distance ld ON (ld.fromLocid = ot.fromLocid OR ld.fromLocid = ot.toLocid) AND (ld.toLocid = ot.fromLocid OR ld.toLocid = ot.fromLocid)
लेकिन इस क्वेरी के बारे में बताएं कहते हैं, "रेंज प्रत्येक रिकॉर्ड के लिए जाँच की"। क्या यह एक बुरा अभ्यास है?
परिणाम
--------------------------------------------------------
Id | fromLocid | toLocid | otherdata | distance
--------------------------------------------------------
22 | 2 | 4 | xxxx | 63
78 | 3 | 5 | xxxx | 70
अपेक्षित परिणाम होना चाहिए
-----------------------------------------------------
Id | fromLocid | toLocid | otherdata | distance
-----------------------------------------------------
12 | 5 | 3 | xxxx | 70
22 | 2 | 4 | xxxx | 63
56 | 8 | 6 | xxxx | 15
78 | 3 | 5 | xxxx | 70
आपने पहले से ही अपने प्रश्न – Andreas
का उत्तर दिया है, लेकिन वह दूसरी क्वेरी कहती है "प्रत्येक रिकॉर्ड के लिए रेंज की जांच की गई"। क्या यह एक बुरा अभ्यास है? – jane
प्रति से नहीं; mysql सिर्फ आपको बता रहा है कि यह रेंज एक्सेस विधि का उपयोग करता है जिसका अर्थ है कि "यह उपयोग करने के लिए कोई अच्छी अनुक्रमणिका नहीं है" (http://dev.mysql.com/doc/refman/5.1/en/explain-output.html) ", जो वास्तव में या के कारण है। – Andreas