आपके पास candidates
. के बीच शामिल होने की शर्त नहीं है और jobs
, तो आपको दोनों टेबलों के बीच कार्टेशियन उत्पाद मिलता है। साथ ही, skill_names
. पर शामिल होने की शर्त के साथ एक समस्या है , जहां दोनों कॉलम समान हैं (यह फिर से एक कार्टेशियन उत्पाद उत्पन्न करता है)।
SELECT can.* , co.*, j.*, sn.*
FROM candidates AS can
JOIN jobs AS j ON j.candidate_id = can.candidate_id --> here: missing join condition
JOIN companies AS co ON j.company_id = co.company_id
JOIN skills AS s ON s.job_id = j.job_id
JOIN skill_names AS sn ON sn.skill_id = s.skill_id --> and here: wrong join condition
कई RDBMS JOIN
. पर सिंटैक्स त्रुटि उत्पन्न करते हैं बिना ON
खंड (यदि आप कार्टेशियन उत्पाद चाहते हैं, तो आपको CROSS JOIN
का उपयोग करके इसके बारे में स्पष्ट होना चाहिए ), लेकिन, अफसोस, MySQL नहीं।
जब इस प्रश्न की बात आती है:
नहीं, जब तक आप inner join
का उपयोग कर रहे हैं s (नहीं left join
s), जॉइन ऑर्डर क्वेरी प्लानर के लिए कोई मायने नहीं रखता है, जो उन्हें उस क्रम में पुनर्व्यवस्थित करेगा जो उसे लगता है कि यह अधिक कुशल है।