2012-01-26 18 views
5
SELECT title,name FROM Lessons,Users WHERE Lessons.author = Users.email; 

औरइन तीन MySQL प्रश्नों के बीच क्या अंतर है?

SELECT title,name FROM Lessons JOIN Users ON Lessons.author = Users.email; 

और

SELECT title,name FROM Lessons INNER JOIN Users ON Lessons.author = Users.email; 

सबक author नाम के एक Users.email के लिए एक विदेशी कुंजी के रूप में सूचीबद्ध एक स्तंभ है। titleLessons और name में एक स्तंभ Users

+0

मेरा मानना ​​है कि यह इस सवाल में संबोधित किया जाता है: http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line – jzila

+0

अंतर केवल शैली है, – onedaywhen

उत्तर

12

में एक स्तंभ है वहाँ तीन बयानों के बीच कोई अंतर नहीं है वे सभी कर रहे हैं, या तो अस्पष्ट या स्पष्ट, INNER JOIN रों

  1. पहले बयान का उपयोग कर रहा है, निहित वर्ष वाक्य रचना में शामिल हो। हालांकि यह अभी भी समर्थित है, स्पष्ट जोड़ों का उपयोग करके दोनों अधिक पठनीय और रखरखाव योग्य है। पुराने स्टाइल में शामिल न हों।

  2. दूसरा कथन का उपयोग कर में शामिल होने के प्रकार को स्पष्ट किए बिना स्पष्ट रूप से शामिल हो रहा है। डिफ़ॉल्ट रूप से, यह एक INNER JOIN

  3. तीसरे बयान भी एक स्पष्ट है शामिल होने है और किसी भी अस्पष्टता से बचा जाता है। यह अब तक लिखने का सबसे अनुशंसित तरीका है।

1

न केवल सही बेवकूफ हैं, लेकिन एक और तरीका हो सकता है। , तो उदाहरण के लिए, आप Lesson.email में Lessons.author नाम बदलने सकता है, क्रम में आप इस्तेमाल कर सकते हैं प्राकृतिक शामिल हों जो परोक्ष विभिन्न तालिकाओं से कतारें लग बांध सुनिश्चित करें कि संबंधित कॉलम दो तालिकाओं में एक ही नाम है बनाने के लिए, कि शेयर एक ही नाम:

-- After renaming Lessons.author in Lessons.email, you simply use NATURAL JOIN 
SELECT title,name FROM Lessons NATURAL JOIN Users; 
संबंधित मुद्दे