Brakuje warunku dołączenia między candidates
i jobs
, dzięki czemu między obydwoma stołami otrzymujesz produkt kartezjański. Ponadto występuje problem z warunkiem dołączenia do skill_names
, gdzie obie kolumny są takie same (to ponownie generuje iloczyn kartezjański).
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
Wiele RDBMS zgłasza błąd składni przy JOIN
bez ON
klauzula (jeśli chcesz otrzymać produkt kartezjański, musisz to wyraźnie określić, używając CROSS JOIN
), ale niestety nie MySQL.
Jeśli chodzi o to pytanie:
Nie. Dopóki używasz inner join
s (nie left join
s), kolejność łączenia nie ma znaczenia dla planisty zapytań, który przestawi je w kolejności, którą uważa za bardziej wydajną.