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

Điều kiện INNER JOIN trong mệnh đề WHERE hoặc mệnh đề ON?

Đối với các phép nối bên trong như thế này, chúng tương đương về mặt logic. Tuy nhiên, bạn có thể gặp phải các tình huống trong đó điều kiện trong mệnh đề nối có nghĩa khác với điều kiện trong mệnh đề where.

Như một minh họa đơn giản, hãy tưởng tượng bạn thực hiện một phép nối bên trái như vậy;

select x.id
from x
       left join y
         on x.id = y.id
;

Ở đây, chúng tôi đang lấy tất cả các hàng từ x, bất kể có id phù hợp trong y hay không. Bây giờ, giả sử điều kiện tham gia của chúng tôi tăng lên - chúng tôi không chỉ tìm kiếm các kết quả phù hợp trong y dựa trên id mà còn dựa trên id_type.

select x.id
from x
       left join y
         on x.id = y.id
         and y.id_type = 'some type'
;

Một lần nữa, điều này cung cấp cho tất cả các hàng trong x bất kể có khớp (id, id_type) trong y hay không.

Tuy nhiên, điều này rất khác:

select x.id
from x
       left join y
         on x.id = y.id
where y.id_type = 'some type'
;

Trong tình huống này, chúng tôi đang chọn tất cả các hàng của x và cố gắng khớp với các hàng từ y. Bây giờ đối với các hàng không có khớp nào trong y, y.id_type sẽ là null. Do đó, y.id_type ='some type' không được thỏa mãn, vì vậy những hàng không có kết quả phù hợp sẽ bị loại bỏ, điều này thực sự biến điều này thành một liên kết bên trong.

Câu chuyện ngắn:đối với các liên kết bên trong, điều kiện đi đến đâu không quan trọng nhưng đối với các liên kết bên ngoài thì có thể.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thủ tục lưu trữ MySQL

  2. Ví dụ ORD () - MySQL

  3. Hiển thị tất cả các khóa hiện tại từ get_lock

  4. Kết nối PHP không thành công:SQLSTATE [HY000] [2002] Kết nối bị từ chối

  5. Làm thế nào để chỉ định Ruby regex khi sử dụng Active Record trong Rails?