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

MySQL tham gia với mệnh đề where

Bạn cần đặt nó vào join mệnh đề, không phải where :

SELECT *
FROM categories
LEFT JOIN user_category_subscriptions ON 
    user_category_subscriptions.category_id = categories.category_id
    and user_category_subscriptions.user_id =1

Hãy xem, với một inner join , đặt một mệnh đề trong join hoặc where là tương đương. Tuy nhiên, với outer join , chúng rất khác nhau.

Với tư cách là một join điều kiện, bạn chỉ định tập hợp hàng mà bạn sẽ tham gia vào bảng. Điều này có nghĩa là nó đánh giá user_id = 1 đầu tiên và lấy tập hợp con của user_category_subscriptions với một user_id trong tổng số 1 để tham gia vào tất cả các hàng trong categories . Điều này sẽ cung cấp cho bạn tất cả các hàng trong categories , trong khi chỉ các categories mà người dùng cụ thể này đã đăng ký sẽ có bất kỳ thông tin nào trong user_category_subscriptions cột. Tất nhiên, tất cả các categories khác sẽ được điền bằng null trong user_category_subscriptions cột.

Ngược lại, where mệnh đề tham gia và sau đó làm giảm tập hợp hàng. Vì vậy, điều này thực hiện tất cả các phép nối và sau đó loại bỏ tất cả các hàng mà user_id không bằng 1 . Bạn còn lại một cách không hiệu quả để có được inner join .

Hy vọng rằng điều này sẽ hữu ích!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhóm theo tháng trong MySQL

  2. Cách kết nối với cơ sở dữ liệu bằng ứng dụng khách NaviCat MySQL

  3. localhost so với 127.0.0.1 trong mysql_connect ()

  4. Tôi có thể nối nhiều hàng MySQL vào một trường không?

  5. CHỌN / NHÓM THEO - phân đoạn thời gian (10 giây, 30 giây, v.v.)