मैं केवल उन स्टेशनों की तुलना करना और प्राप्त करना चाहता हूं जो एक से दूसरे की दूरी के भीतर हैं। मान लें कि मेरे पास 3 स्टेशन A-B-C हैं, उन सभी की स्थिति x-y-z है। मैं उन स्टेशनों को प्राप्त करना चाहता हूं जो 30 मीटर से दूर हैं (मेरे पास दूरी की गणना करने के लिए एक फ़ंक्शन है तो चलिए इसे दूरी (x, y) कहते हैं)।

चुनें * स्टेशन से जहां दूरी(स्टेशन1, स्टेशन2) < 30

मेरी समस्या यह है कि आप स्टेशन 1 और स्टेशन 2 की दो अलग-अलग पंक्तियों की दूरी की तुलना कैसे कर सकते हैं?

धन्यवाद!!!

0
ncohen 8 अगस्त 2011, 15:30

1 उत्तर

सबसे बढ़िया उत्तर

आप ऐसा कुछ कर सकते हैं:

select a.*
from station a
inner join station b
on distance(a.station_id, b.station_id) < 30;
1
Daniel Hilgarth 8 अगस्त 2011, 15:35
धन्यवाद, लेकिन परिणाम बहुत अजीब है... मेरे पास बहुत सारे डुप्लिकेट हैं, भले ही मैं शर्त जोड़ दूं a.ID != b.ID... आप इसे कैसे समझाते हैं? और क्या मैं आपके उदाहरण में b का चयन कर सकता हूं?
 – 
ncohen
8 अगस्त 2011, 15:57
इसका कारण यह है कि यह स्टेशन में प्रत्येक प्रविष्टि की तुलना स्टेशन की प्रत्येक प्रविष्टि से करता है - एक कार्टेशियन उत्पाद। select distinct a.* के उपयोग से मदद मिलनी चाहिए।
 – 
Daniel Hilgarth
8 अगस्त 2011, 16:00
जादू की तरह काम करता है!!! धन्यवाद - संपादित करें: क्या आप जानते हैं कि डुप्लिकेट से कैसे बचें जैसे कि स्टेशन ए = 1 और स्टेशन बी = 2 स्टेशन के साथ दिखाई नहीं देंगे। ए = 2 और स्टेशन बी = 1
 – 
ncohen
8 अगस्त 2011, 16:07