Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengapa kueri saya kembali jauh ke banyak hasil?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa MySQL melaporkan kesalahan sintaks pada FULL OUTER JOIN?

  2. Menggunakan group by pada dua bidang dan menghitung dalam SQL

  3. Pengecualian di utas utama org.hibernate.MappingException:Entitas tidak dikenal

  4. Bagaimana cara menghindari kutipan tunggal dalam string literal menggunakan MySQL dari Java

  5. #1071 - Kunci yang ditentukan terlalu panjang; panjang kunci maksimal adalah 1000 byte