2011-06-07 15 views
20

मेरे पास एक प्रश्न है जिसे मैंने ms sql 2000 से खींच लिया और एक MySQL क्वेरी में प्लग किया। यह काम नहीं किया, MySql * = ऑपरेटर पर चकित होगा। इस उदाहरण में मेरे पास दो वर्चर कॉलम हैं जिन्हें person_name कहा जाता है।एसक्यूएल सर्वर 2000 में यह ऑपरेंड (* = स्टार-बराबर) क्या है?

SELECT * FROM tbl1 a, tbl2 b 
WHERE a.id = b.id 
AND a.person_name *= b.person_name 

मैं अन्य भाषाओं मींट में पता * = myTotal के रूप में भी मींट * मींट = myTotal पढ़ा जा सकता है। हालांकि, मैं उन वर्चर्स के साथ काम कर रहा हूं जिनमें सभी वर्ण, कोई पूर्णांक नहीं है। मैंने इसे लिखा:

AND a.person_name * a.person_name = b.person_name 

वोला! ऐसा लगता है कि काम किया है। क्या कोई समझा सकता है कि क्या हो रहा है? क्या * = ऑपरेटर वर्णों को उनके पूर्णांक समकक्षों में परिवर्तित कर रहा है या? और मैं इस ऑपरेटर को वेब पर कहीं भी क्यों नहीं ढूंढ सका?

+0

क्या वे स्ट्रिंग/चार फ़ील्ड हैं? आश्चर्य है कि तारों को गुणा करने के पीछे तर्क क्या होगा। –

+1

हां, वे वर्चर्स फ़ील्ड हैं। मैं खुद से एक ही सवाल पूछ रहा था, "क्यों नरक में आप दो तारों को गुणा करेंगे?" –

+1

और यदि आप अभी भी एसक्यूएल सर्वर 2000 डेटाबेस का उपयोग कर रहे हैं तो * * या * = के सभी उदाहरणों को बाएं जॉइन या राइट जॉइन में तय करने की आवश्यकता है क्योंकि एसक्यूएल सर्वर 2000 में भी अंतर्निहित जुड़ना टूटा हुआ है और यह सही परिणाम नहीं दे रहा है कभी-कभी क्रॉस में शामिल होने के रूप में छेड़छाड़ की जाती है। एसक्यूएल सर्वर में बाहरी जुड़ने के लिए लागू शामिल होने का कभी भी उपयोग नहीं किया जाना चाहिए। – HLGEM

उत्तर

20

एसक्यूएल 2000 में इस में शामिल हों एक वाम बाहरी के रूप में इस्तेमाल किया गया था

= * एक सही बाहरी शामिल हों है

आपकी क्वेरी हो सकता है:

: here कहा

SELECT 
    * 
FROM 
    tbl1 a LEFT OUTER JOIN tbl2 b ON a.person_name = b.person_name 
WHERE 
    a.id = b.id 

के रूप में

गैर मानक उत्पाद-विशिष्ट वाक्यविन्यासका उपयोग करके बाहरी शामिल होने को निर्दिष्ट करता हैऔर WHERE खंड। * = ऑपरेटर का उपयोग बाएं बाहरी में शामिल करने के लिए किया जाता है और = * ऑपरेटर का उपयोग को सही बाहरी शामिल करने के लिए किया जाता है।

+0

ऐसा कुछ है जो उन्होंने मुझे स्कूल में नहीं सिखाया। मैंने आपके सुझाव को लागू किया है और यह काम किया है। आपका बहुत बहुत धन्यवाद! –

+0

हां, यह कुछ ऐसा है जो मैंने SQL 2000 में डिज़ाइन की गई रिपोर्ट को बदलते समय कई बार चलाया। – CristiC

+1

यह पोस्ट बहुत समय पहले था, लेकिन मैंने सोचा कि यह यहां उल्लेख करना अच्छा है। बाएं बाहरी जॉइन से निपटने के दौरान क्वेरी क्लासिक गलती का एक उदाहरण है। WHERE क्लॉज के कारण a.id = b।आईडी, यह वास्तव में एक इंटर्न जॉइन की तरह बन जाता है। एक वास्तविक बाएं आउटर जॉइन के लिए, WHERE क्लॉज को बाएं बाहरी जॉइन में ले जाना चाहिए जैसे: बाएं बाहरी जॉइन ... a.person_name = b.person_name और a.id = b.id – umphy

4

एमएसएसक्यूएल में, * WHERE खंड में * = सम्मेलन में शामिल होने का संकेत मिलता है। तो आप वास्तव में क्या देख रहे हैं वह व्यक्ति_नाम पर tbl1 और tbl2 के बीच एक बाएं बाहरी जॉइन है जहां tbl1 के सभी मान और tbl2 पर मिलान मान वापस आ जाएंगे।

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