Du mangler en sammenføjningsbetingelse mellem candidates
og jobs
, så du får et kartesisk produkt mellem begge borde. Der er også et problem med join-betingelsen på skill_names
, hvor begge kolonner er ens (dette genererer igen et kartesisk produkt).
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
Mange RDBMS ville rejse en syntaksfejl på en JOIN
uden en ON
klausul (hvis du ønsker et kartesisk produkt, skal du være eksplicit om det ved at bruge CROSS JOIN
), men desværre ikke MySQL.
Når det kommer til dette spørgsmål:
Nej. Så længe du bruger inner join
s (ikke left join
s), er sammenføjningsrækkefølgen ligegyldig for forespørgselsplanlæggeren, som vil omarrangere dem i den rækkefølge, som den mener er den mest effektive.