Du saknar ett anslutningsvillkor mellan candidates
och jobs
, så du får en kartesisk produkt mellan båda borden. Det finns också ett problem med kopplingsvillkoret på skill_names
, där båda kolumnerna är samma (detta genererar återigen en 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
Många RDBMS skulle skapa ett syntaxfel på en JOIN
utan en ON
klausul (om du vill ha en kartesisk produkt måste du vara tydlig om den genom att använda CROSS JOIN
), men tyvärr inte MySQL.
När det kommer till denna fråga:
Nej. Så länge du använder inner join
s (inte left join
s), spelar sammanfogningsordningen ingen roll för frågeplaneraren, som kommer att ordna om dem i den ordning som den anser är effektivare.