इसके रूप में, आप एक आउटपुट बनाना चाहते हैं जो किसी स्टेशन से सिटी स्क्वायर तक जाने वाले 5 ट्राम और सिटी स्क्वायर से किसी अन्य स्टेशन पर जाने वाले 5 ट्राम को सूचीबद्ध करता है। इस मामले में - आप इन दो चीजों के बीच कोई संबंध नहीं बना रहे हैं (उदाहरण के लिए, समय पर) - आपको एक छद्म कॉलम में शामिल होना चाहिए, row_number() OVER ()
दिमाग में आता है:
SELECT '$name' AS name1, w1.time1, 'City Square - arrival' AS name2, w1.time2,
'City Square - departure' AS name3, w2.time3, '$name2' AS name4, w2.time4
FROM (
SELECT dt1.time AS time1, dt2.time AS time2, row_number() OVER () AS rn
FROM departure_times AS dt1
JOIN departure_times AS dt2 USING (tram_id)
WHERE dt1.name = '$name' AND dt2.name = 'CitySquare'
LIMIT 5) w1
JOIN (
SELECT dt1.time AS time3, dt2.time AS time4, row_number() OVER () AS rn
FROM departure_times AS dt1
JOIN departure_times AS dt2 USING (tram_id)
WHERE dt1.name = 'CitySquare' AND dt2.name = '$name2'
LIMIT 5) w2 USING (rn);
प्रत्येक उप-प्रश्नों में आप रुचि की पांच पंक्तियों का चयन करते हैं। चूंकि कोई स्पष्ट संपत्ति नहीं है, आप जॉइन
. कर सकते हैं पंक्तियों के इन दो सेटों पर, आपको कुछ छद्म-स्तंभ बनाने होंगे जो उस उद्देश्य की पूर्ति कर सकें (आपको इसमें शामिल होने के लिए कुछ चाहिए या आपको एक CROSS JOIN
मिलेगा। जिसके परिणामस्वरूप आउटपुट में 5 x 5 पंक्तियाँ होती हैं)। row_number() OVER () AS rn
बस यही करता है:यह उपनाम के साथ एक नया कॉलम बनाता है rn
जिसमें पूरे पंक्ति सेट पर पंक्ति संख्या होती है (OVER ()
, 5 पंक्तियों के कारण LIMIT
खंड)। आप इसे दोनों उप-प्रश्नों में करते हैं ताकि आप इसे शामिल होने की स्थिति के रूप में उपयोग कर सकें:USING (rn)
. आपको आउटपुट में इस कॉलम का उपयोग करने की आवश्यकता नहीं है।
आपका इस पर कोई नियंत्रण नहीं है कि कौन से 5 ट्राम बार सूचीबद्ध होंगे। अगर आप ऐसा चाहते हैं, तो आपको कुछ ऐसा करना चाहिए जैसे WHERE dt1> CURRENT_TIME
और dt1 द्वारा ऑर्डर करें
दोनों उप-प्रश्नों में, या उस पंक्ति के साथ कुछ।