सेवा तालिका को सीधे पढ़ने के बजाय, उप क्वेरी का उपयोग करें और उसमें शामिल हों।
select s.*, u.`fname`, u.`lname`, aif.`airport` FROM
( select * from services order by id limit 2) as s INNER JOIN airports_in_flight aif
ON s.`id` = aif.`service_id` INNER JOIN users u
ON s.`service_provider_id` = u.`id`
MySQL के आपके संस्करण के आधार पर, आपके पास लिमिट और ऑफ़सेट का उपयोग करके एक सबक्वेरी नहीं हो सकती है (MySQL का यह संस्करण अभी तक 'LIMIT &IN/ALL/ANY/SOME सबक्वेरी' का समर्थन नहीं करता है) लेकिन यह अभी भी काम करेगा।पी>
संपादित करें:
यदि आप इस पर आंतरिक क्वेरी सेट करते हैं:
(SELECT s.id
FROM services s
INNER JOIN airports_in_flight aif
ON s.`id` = aif.`service_id`
INNER JOIN users u
ON s.`service_provider_id` = u.`id`
LIMIT 2)
तब यह केवल Airports_in_flight और उपयोगकर्ताओं के साथ सेवाएं लौटाएगा (संभवतः एक अलग खंड जोड़ें)।
स्पष्ट करने के लिए संपादित करें:
अभी आपके पास यह आपके चयन के रूप में है:
select s.*, u.`fname`, u.`lname`, aif.`airport` FROM
services as s INNER JOIN airports_in_flight aif
ON s.`id` = aif.`service_id` INNER JOIN users u
ON s.`service_provider_id` = u.`id`
आप 2 सेवाओं तक सीमित करना चाहते हैं (मुझे नहीं पता कि क्या आप सभी सेवाएं चाहते हैं, मैं केवल उन सेवाओं का अनुमान लगा रहा हूं जिनके साथ उड़ान में मेल खाने वाले उपयोगकर्ता और हवाई अड्डे हैं), इसलिए आपको सीमा को सही टेबल पर रखना होगा।
इस मामले में, सही तालिका सेवा तालिका है। चीजों को सरल बनाने के लिए आपके पास जो कुछ भी है उसके सरलीकृत संस्करण से शुरू करें:
SELECT s.*, aif.`airport` FROM
services as s
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`
मैं एक धारणा बनाने जा रहा हूं कि प्रत्येक सेवा के लिए उड़ान पंक्ति में एक हवाई अड्डा है (हम उस जटिलता को बाद में जोड़ सकते हैं)।
पहली 2 सेवाओं को सूचीबद्ध करने के लिए, हम सेवाओं की सीमा चाहते हैं, संपूर्ण क्वेरी नहीं, इसलिए यह होगी:
SELECT s.*, u.`fname`, u.`lname`, aif.`airport` FROM
(select * from services limit 2) as s
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`
ध्यान दें कि मैंने टेबल सेवाओं को एक क्वेरी के साथ बदल दिया है, जिसे अब मैं सीमित कर सकता हूं, यह सबक्वायरी है। अगर हम अब केवल उन सेवाओं को देखना चाहते हैं जिनके पास उड़ान में एक हवाई अड्डा है, तो हमें उस सबक्वेरी को यहां से बदलना होगा:
select * from services limit 2
करने के लिए
select ss.* from services ss
inner join airports_in_flight aifs on ss.`in` = aifs.`service_id` limit 2
मैंने सेवाओं और हवाई अड्डों_इन_फ्लाइट टेबल एसएस और एआईएफ का नाम बदल दिया है ताकि वे मुख्य क्वेरी में नामों से न टकराएं, मेरी पंक्तियों को केवल सेवा तालिका तक सीमित करने के लिए एक आंतरिक जुड़ाव डालें, और 2 तक सीमित करें, इसलिए सबक्वायरी को इसमें डालें अब हमें जो क्वेरी मिलती है:
select s.*, u.`fname`, u.`lname`, aif.`airport`
FROM
(select ss.* from services ss
inner join airports_in_flight aifs on ss.`in` = aifs.`service_id`
limit 2) as s
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`
इसके बाद आपको उपयोगकर्ताओं के लिए आंतरिक जुड़ाव जोड़ने के लिए सबक्वायरी का विस्तार करने में सक्षम होना चाहिए (इस प्रकार केवल उन लोगों के लिए सेवाओं को सीमित करना जिनके पास Airports_in_flight पंक्तियां और उपयोगकर्ता पंक्तियां हैं), और उपयोगकर्ता तालिका को मुख्य क्वेरी में जोड़ें।