में सबसे कम पथ कैसे प्राप्त करें मुझे उड़ान पर सभी स्टॉपओवर प्राप्त करने के लिए एक बयान प्राप्त करने में परेशानी है।फ्लाइट्रॉउट्स-टेबल
मेरे पास नीचे उड़ान भरने वाली टेबल है, जिसमें एक स्रोत-हवाई अड्डा और गंतव्य-हवाई अड्डा है। अब मैं एयरपोर्ट ए से एयरपोर्ट बी तक सबसे कम उड़ानों (कम से कम स्टॉपओवर) प्राप्त करना चाहता हूं, ए से बी तक कोई सीधा मार्ग नहीं है इसलिए मुझे कई मार्गों को एक साथ जोड़ना है।
उदाहरण के लिए, मैं मार्गों
(18 > 24 | 24 > 87 | 87 > 1403)
और नहीं
(18 > 24 | 24 > 87 | 87 > 99| 99 > 1403)
यहाँ कुछ परीक्षण डाटा है प्राप्त करना चाहते हैं अगर मैं 18 से 1403 के लिए जाना चाहते
src_apid | dst_apid
---------+----------
18 | 24
24 | 87
87 | 99
87 | 1403
99 | 18
99 | 1403
मेरी कोशिश इस तरह दिखती है:
WITH rejkabrest (
src_apid,
dst_apid
) AS (
SELECT
src_apid,
dst_apid
FROM
routes
WHERE
src_apid = 18
UNION ALL
SELECT
a.src_apid,
a.dst_apid
FROM
routes a
INNER JOIN rejkabrest b ON a.src_apid = b.dst_apid
WHERE b.dst_apid = 1403
) SELECT
src_apid, dst_apid
FROM
rejkabrest;
लेकिन इस तरह से मुझे केवल उन सभी मार्ग मिलते हैं जो स्रोत-हवाई अड्डे 18 से शुरू होते हैं। और यदि मैं एक और तरीका कोशिश करता हूं, तो मुझे लूप-समस्या मिलती है।
आशा है कि आप लोग मेरी मदद कर सकते हैं। अग्रिम में बहुत धन्यवाद!
https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm –
[यह उत्तर] (http://stackoverflow.com/a/39119303/5089204) SQL-Server है वाक्यविन्यास, लेकिन आपको रास्ता बता सकता है। मुख्य चाल है, सभी विज़िट किए गए स्टेशनों के साथ बढ़ती स्ट्रिंग को ले जाने के लिए और यदि एक स्थान फिर से देखा जाता है तो रिकर्सन को रोकें। – Shnugo