Липсва Ви условие за присъединяване между 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), редът на свързване няма значение за планиращия заявки, който ще ги пренареди в реда, който смята за по-ефективен.