Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tại sao truy vấn của tôi lại cho nhiều kết quả?

Bạn đang thiếu một điều kiện kết hợp giữa candidatesjobs , vì vậy bạn sẽ có được một sản phẩm cacte giữa cả hai bảng. Ngoài ra, có vấn đề với điều kiện tham gia trên skill_names , trong đó cả hai cột đều giống nhau (điều này một lần nữa tạo ra một sản phẩm cacte).

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

Nhiều RDBMS sẽ phát sinh lỗi cú pháp trên JOIN không có ON mệnh đề (nếu bạn muốn có một sản phẩm của cartesian, bạn cần phải nói rõ về nó bằng cách sử dụng CROSS JOIN ), nhưng, than ôi, không phải MySQL.

Khi nói đến câu hỏi này:

Không. Miễn là bạn đang sử dụng inner join s (không phải left join s), thứ tự kết hợp không quan trọng đối với trình lập kế hoạch truy vấn, điều này sẽ sắp xếp lại chúng theo thứ tự mà nó cho là hiệu quả hơn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao việc chèn / cập nhật MySQL InnoDB trên các bảng lớn rất chậm khi có một vài chỉ mục?

  2. MySQL:Tại sao lại dùng varchar (254) chứ không phải varchar (255)?

  3. Mysql xóa tất cả các bài đăng có meta_key nhất định

  4. Chọn các hàng mà trục xoay có TẤT CẢ id

  5. Lệnh tùy chỉnh MySQL