एक क्वेरी में MySQL मल्टीपल जॉइन करता है?


121

मेरे पास निम्नलिखित प्रश्न हैं:

SELECT
  dashboard_data.headline,
  dashboard_data.message,
  dashboard_messages.image_id 
FROM dashboard_data
INNER JOIN dashboard_messages
  ON dashboard_message_id = dashboard_messages.id

तो मैं एक का उपयोग कर रहा हूँ INNER JOINऔर हथियाने image_id। इसलिए अब, मैं उस इमेज_ को लेना चाहता हूं और उसे images.filenameइमेज टेबल से चालू करना चाहता हूं ।

मैं इसे अपनी क्वेरी में कैसे जोड़ सकता हूं?


जवाबों:


209

आप बस इस तरह से एक और जोड़ जोड़ सकते हैं:

SELECT dashboard_data.headline, dashboard_data.message, dashboard_messages.image_id, images.filename
FROM dashboard_data 
    INNER JOIN dashboard_messages 
        ON dashboard_message_id = dashboard_messages.id
    INNER JOIN images
        ON dashboard_messages.image_id = images.image_id 

हालाँकि इस बात से अवगत रहें, क्योंकि यह एक है INNER JOIN, अगर आपके पास एक छवि के बिना एक संदेश है, तो पूरी पंक्ति को छोड़ दिया जाएगा। यदि यह एक संभावना है, तो आप ऐसा करना चाहते हैं LEFT OUTER JOINजो आपके सभी डैशबोर्ड संदेशों और एक इमेज_फिलनेम को केवल तभी लौटाएगा जब कोई मौजूद होगा (अन्यथा आपको एक अशक्त मिलेगा)

SELECT dashboard_data.headline, dashboard_data.message, dashboard_messages.image_id, images.filename
FROM dashboard_data 
    INNER JOIN dashboard_messages 
        ON dashboard_message_id = dashboard_messages.id
    LEFT OUTER JOIN images
        ON dashboard_messages.image_id = images.image_id 

19
किसी को पता है कि यह वास्तव में कैसे काम करता है? क्या दूसरा जुड़ाव तालिका 3 के साथ पहले जुड़ने के परिणामों में शामिल हो रहा है, या क्या यह तालिका 3 के साथ तालिका 1 को अलग से जोड़ रहा है? (यानी, तालिका 2 के साथ तालिका 1 में शामिल होना, और फिर तालिका 3 के साथ अलग से तालिका 1 में शामिल होना, फिर इसे वापस लौटाना?) क्या इसका कोई मतलब है? मैं पूछता हूं क्योंकि मैं इस तरह से मल्टी-टेबल जॉइन कर रहा हूं, और कभी-कभी अप्रत्याशित परिणाम मिलते हैं।
एरोन वालेंटाइन

3
यही ओन क्लॉज आपको बताएगा। 2 में शामिल होने पर (तीसरी तालिका में शामिल होने के लिए) क्लॉज़ प्रत्येक तालिका में image_id फ़ील्ड पर छवियों के लिए डैशबोर्ड_मेसेज में शामिल हो रहा है। तो, इस मामले में यह ए से बी और फिर बी से सी है। यह आपके नियंत्रण में है। यदि आपको आवश्यकता हो तो आप इसे A से B और A से C बना सकते हैं
जॉन बिडल

16

बस एक और जोड़ जोड़ें:

SELECT dashboard_data.headline,
       dashboard_data.message,
       dashboard_messages.image_id,
       images.filename 
FROM dashboard_data 
    INNER JOIN dashboard_messages
            ON dashboard_message_id = dashboard_messages.id 
    INNER JOIN images
            ON dashboard_messages.image_id = images.image_id

9

मैंने एक ही SQL क्वेरी में दो LEFT JOINS का उपयोग करने का अपना अनुभव साझा किया।

मेरे पास 3 टेबल हैं:

तालिका 1) रोगी में रोगी रोगी, रोगी नाम शामिल हैं

तालिका 2) नियुक्ति में कॉलम अपॉइंटमेंट, अपॉइंटमेंटडाइट टाइमटाइम, रोगी, डॉक्टरआईडी शामिल हैं

तालिका 3) डॉक्टर में कॉलम डॉक्टरआईडी, डॉक्टरनाम शामिल हैं


प्रश्न:

SELECT Patient.patientname, AppointmentDateTime, Doctor.doctorname

FROM Appointment 

LEFT JOIN Doctor ON Appointment.doctorid = Doctor.doctorId  //have doctorId column common

LEFT JOIN Patient ON Appointment.PatientId = Patient.PatientId      //have patientid column common

WHERE Doctor.Doctorname LIKE 'varun%' // setting doctor name by using LIKE

AND Appointment.AppointmentDateTime BETWEEN '1/16/2001' AND '9/9/2014' //comparison b/w dates 

ORDER BY AppointmentDateTime ASC;  // getting data as ascending order

मैंने "mm / dd / yy" की तरह दिनांक स्वरूप प्राप्त करने के लिए समाधान लिखा है (मेरे नाम "VARUN TEJ REDDY" के तहत)


3

एसक्यूएल में मल्टी जॉइन उत्तरोत्तर एक के बाद एक व्युत्पन्न टेबल बनाकर काम करते हैं। प्रक्रिया को समझाते हुए इस लिंक को देखें:

https://www.interfacett.com/blogs/multiple-joins-work-just-like-single-joins/


2
हमेशा एक महत्वपूर्ण लिंक का सबसे प्रासंगिक हिस्सा उद्धृत करें, यदि लक्ष्य साइट उपलब्ध नहीं है या स्थायी रूप से ऑफ़लाइन है।
आर्मली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.