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

MySQL Select ID xảy ra trên các hàng khác nhau với nhiều giá trị cụ thể cho một cột

Biểu thức của bạn trong mệnh đề WHERE hoạt động dựa trên một hàng đơn trong tập hợp kết quả đã tham gia. Đó là lý do tại sao WHERE category_id = 201 AND category_id = 202 không hoạt động - vì nó không thể là hai giá trị trên một hàng.

Vì vậy, bạn cần một số cách để nối hai hàng từ bảng thành một hàng của tập kết quả. Bạn có thể thực hiện việc này bằng cách tự tham gia :

SELECT c1.item_id
FROM item_category AS c1
INNER JOIN item_category AS c2 ON c1.item_id = c2.item_id
WHERE c1.category_id = 201 AND c2.category_id = 202

Kỹ thuật này khó mở rộng quy mô khi bạn muốn tìm kiếm ba, bốn, năm giá trị hoặc nhiều hơn, vì nó yêu cầu N-1 tham gia để khớp với N giá trị.

Vì vậy, một phương pháp khác là sử dụng GROUP BY:

SELECT c.item_id, COUNT(*) AS cat_count
FROM item_category AS c
WHERE c.category_id IN (201,202)
GROUP BY c.item_id
HAVING cat_count = 2

Cả hai kỹ thuật đều ổn và hoạt động tốt hơn trong các trường hợp khác nhau.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhược điểm của trích dẫn số nguyên trong truy vấn Mysql?

  2. JDBC:Chèn giá trị Ngày vào MySQL

  3. Ví dụ về DATE_ADD () - MySQL

  4. Làm cách nào để tạo LEFT JOIN với truy vấn con SELECT bằng QueryBuilder trong Doctrine 2?

  5. Đầu ra MYSQL ở định dạng cây HOẶC Thêm cấp độ (Parent-Child)