2012-06-06 19 views
6

मेरे पास दो टेबल, टेबल ए और टेबल बी हैं। मेरे पास प्रत्येक तालिका के लिए दो विशेषताएँ L1 और L2 हैं। मैं दोनों टेबलों के लिए सभी पंक्तियों को आउटपुट करने का प्रयास कर रहा हूं जहां एल 1 और एल 2 दोनों टेबल के बराबर हैं। समस्या यह है कि एल 1 एक एल 2 मेरी छोटी मात्रा में भिन्न हो सकता है। तो जब मैं दौड़ता हूं:लगभग दो संख्याओं की तुलना में लगभग

SELECT * FROM TableA l1 join TableB l2 on l1.L1 =l2.L1 and l1.L2 = l2.L2 

मुझे रिक्त सेट मिलते हैं, भले ही रिकॉर्ड किए गए रिकॉर्ड हों। मैं इस समस्या को कैसे हल करूं?

उदाहरण:

एल 1 = 118.4363 तालिका A के लिए लेकिन के लिए तालिका बी एल 1 = 118,445428

+5

"कुछ छोटी मात्रा" –

+0

क्या है की तरह तालिका ए के लिए एल 1 = 118.4363 लेकिन तालिका बी एल 1 = 118.445428 –

+0

@cool_cs के लिए मुझे एक ही समस्या का सामना करना पड़ा है और मैं इस समाधान को लागू करने की कोशिश कर रहा हूं, लेकिन मुझे कथन में वाक्यविन्यास अच्छी तरह से समझ में नहीं आता => 'l1' क्या हैं , 'एल 2' और' एल 1' और 'एल 2 'का जिक्र है? –

उत्तर

13

समानता के लिए जाँच करने के बजाय, जाँच करें कि अंतर कुछ सीमा से नीचे है (उदाहरण के लिए, 0.1, उदाहरण के रूप में नीचे)।

SELECT * FROM 
    TableA l1, TableB l2 
WHERE 
    ABS(l1.L1-l2.L1) < 0.1 
    AND 
    ABS(l1.L2-l2.L2) < 0.1 
+0

क्या होता है यदि सहिष्णुता –

+2

@cool_cs के बावजूद भिन्न होती है - फिर सहिष्णुता * चर * होनी चाहिए। –

+0

@cheeken आपके उत्तर के लिए धन्यवाद। मुझे एक ही समस्या का सामना करना पड़ा है और मैं इस समाधान को लागू करने की कोशिश कर रहा हूं, लेकिन मुझे कथन में वाक्यविन्यास (प्रश्न से भी) अच्छी तरह से समझ में नहीं आता है => 'l1',' l2' और 'L1' और' एल 2' का जिक्र है? –

5

आपको 0.01 के अंतर की तरह कुछ सहिष्णुता तैयार करने की आवश्यकता होगी। फिर दो का निरपेक्ष मान की गणना जब घटाया और देखो

SET @tolerance_value = 0.01; 
SELECT * 
FROM 
    TableA l1 join 
    TableB l2 
    on ABS(l1.L1 - l2.L1) < @tolerance_value and ABS(l1.L2 - l2.L2) < @tolerance_value; 
1

आप इंजन हैं, जो "कुछ छोटी मात्रा" में मतभेद है वापस जाने के लिए नहीं पूछ सकते हैं अगर यह आपके सहिष्णुता के भीतर है।

आप पंक्तियों का चयन कर सकते हैं जो "abs (a - b)" दो निश्चित मानों के बीच है।

पंक्तियों की तरह जहां एक-b> 5 या एक - b> एक्सऔरएक - ख < x + 10। उदाहरण के लिए

0

साइबेस या SQL सर्वर में राउंड फ़ंक्शन का उपयोग करने का प्रयास करें, इसलिए 118 मैच 118. अन्य डीबीएमएस के लिए एक समकक्ष समकक्ष खोजें।

माइक

0

आदेश में काम करने के लिए @ cheeken के जवाब देने के लिए, आप पिछले क्वेरी में अर्धविराम डाल चाहिए, अन्यथा यह काम नहीं करेगा:

SELECT * FROM 
    TableA l1, TableB l2 
WHERE 
    ABS(l1.L1-l2.L1) < 0.1 
    AND 
    ABS(l1.L2-l2.L2) < 0.1; 
संबंधित मुद्दे