यहां least()
का उपयोग करने वाली एक विधि दी गई है और greatest()
:
select least(source, destination), greatest(source, destination), max(distance)
from distance
group by least(source, destination), greatest(source, destination);
इसका नुकसान यह है कि आप तालिका में नहीं एक पंक्ति वापस कर सकते हैं। उदाहरण के लिए, यदि आपके पास "मुंबई/चेन्नई/500" के साथ एक पंक्ति थी, तो यह क्वेरी "चेन्नई/मुंबई/500" लौटाएगी -- और यह पंक्ति मूल तालिका में नहीं है।
तो, एक वैकल्पिक तरीका है:
select source, destination, distance
from distance
where source < destination
union all
select destination, source, distance
from distance d
where source > destination and
not exists (select 1
from distance d2
where d2.source = d.destination and d2.destination = d.source
);
यह संस्करण भी एएनएसआई-संगत है और सभी डेटाबेस में काम करना चाहिए।