Anda melewatkan kondisi bergabung antara candidates
dan jobs
, jadi Anda mendapatkan produk kartesius di antara kedua tabel. Juga, ada masalah dengan kondisi bergabung di skill_names
, di mana kedua kolomnya sama (sekali lagi ini menghasilkan produk kartesius).
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
Banyak RDBMS akan memunculkan kesalahan sintaks pada JOIN
tanpa ON
klausa (jika Anda menginginkan produk kartesius, Anda harus eksplisit tentang hal itu dengan menggunakan CROSS JOIN
), tapi, sayangnya, bukan MySQL.
Ketika sampai pada pertanyaan ini:
Tidak. Selama Anda menggunakan inner join
s (bukan left join
s), urutan bergabung tidak menjadi masalah bagi perencana kueri, yang akan mengatur ulang mereka dalam urutan yang dianggap lebih efisien.