Monday 15 August 2011

join - MySQL query is returning duplicates when it shouldn't -


मेरे पास तीन टेबल हैं:

व्यक्ति

  + - ------ + ----------- + | FName | LName | + -------- + ----------- + | पॉल | मेकार्टनी | | जॉन | लिनोन | | जॉन | स्टीवर्ट | | डैनियल | ताश | | स्टीवन | कोलबर्ट | | गुलाबी | फ्लोयड | | द | बीटल्स | | आर्केड | आग | | पहले | अंतिम | | एंड्रयू | बर्ड | + -------- + ----------- +   

प्रकाशन

  + ---- + --------------------------------------- + ------ + --- -------- + --------- + | आईडी | शीर्षक | वर्ष | पेजस्टार्ट | पृष्ठ अंत | + ---- + --------------------------------------- + ---- - + ----------- + --------- + | 9 | चंद्रमा का डार्क साइड। | 1 973 | 0 | 0 | | 10 | द गेट्स ऑफ डॉन पर मुरलीवाला | 1 9 67 | 0 | 0 | | 11 | सार्जेंट। काली मिर्च के लोनली हार्ट्स बैंड क्लब | 1 9 67 | 0 | 0 | | 12 | खुश विचार | 2007 | 0 | 60 | | 13 | काश तुम यहाँ थे | 1 975 | 0 | 0 | | 14 | अंतिम संस्कार | 2004 | 0 | 0 | + ---- + --------------------------------------- + ---- - + ----------- + --------- +   

व्यक्तित्व प्रकाशन

  + - --------- + ---------------- + -------- + -------------- - + | व्यक्ति_आईडी | Publication_id | संपादक | लेखक_एनम्बर | + ----------- + ---------------- + -------- + ----------- ---- + | 11 | 11 | 0 | 1 | | 12 | 11 | 0 | 1 | | 16 | 9 | 0 | 1 | | 17 | 11 | 0 | 1 | + ----------- + ---------------- + -------- + ----------- ---- +   

मैं निम्न प्रश्न का उपयोग करके एक निश्चित प्रकाशन के सभी लेखकों का चयन करने की कोशिश कर रहा हूं:

  SELECT fName, प्रकाशन से lName, व्यक्ति, व्यक्तिप्रदर्शन WHERE Person.id = Person_Publication.person_id और Person_Publication.publication_id = 11;   

लेकिन मेरे द्वारा प्राप्त परिणाम हमेशा डुप्लिकेट होते हैं (हमेशा किसी कारण के लिए 6x)। परिणाम:

  + ------- + ----------- + | FName | LName | + ------- + ----------- + | पॉल | मेकार्टनी | | जॉन | लिनोन | | द | बीटल्स | | पॉल | मेकार्टनी | | जॉन | लिनोन | | द | बीटल्स | | पॉल | मेकार्टनी | | जॉन | लिनोन | | द | बीटल्स | | पॉल | मेकार्टनी | | जॉन | लिनोन | | द | बीटल्स | | पॉल | मेकार्टनी | | जॉन | लिनोन | | द | बीटल्स | | पॉल | मेकार्टनी | | जॉन | लिनोन | | द | बीटल्स | + ------- + ----------- + 18 पंक्तियाँ सेट (0.03 सेकंड)   

क्या कोई मुझे बता सकता है कि ऐसा क्यों हो रहा है और

आप अपनी क्वेरी में तीन तालिकाओं को शामिल कर रहे हैं:

  प्रकाशन से, व्यक्ति, व्यक्तिप्रदर्शन   

लेकिन आपके पास केवल एक हालत में शामिल है:

  WHERE Person.id = Person_Publication.person_id   

आप प्रकाशन और व्यक्ति जोड़ना व्यक्तिप्रदर्शन

स्पष्ट रूप से शामिल वाक्यविन्यास क्यों की एक आदर्श उदाहरण है ब्लॉक:

  और publication.id = Person_Publication.publication.id   

निम्न सिंटैक्स के साथ:

  SELECT fName, प्रकाशन से JOIN Person_Publication पर Person_Publication.publication.id = Publication.id पर व्यक्ति में शामिल करें person.id = Person_Publication.person_id WHERE Person_Publication.publication_id = 11;   

.. ऐसी गलती बस नहीं हो सकती।

No comments:

Post a Comment