Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Chọn giá trị thỏa mãn điều kiện khác nhau trên các hàng khác nhau trong MySQL?

Sử dụng IN() kết hợp GROUP BY ... HAVING COUNT(DISTINCT ...) = so_luong_dieu_kien.

Cú pháp:

SELECT cot_nhom
FROM ten_bang
WHERE cot_dieu_kien IN (gia_tri_1, gia_tri_2, ..., gia_tri_N)
GROUP BY cot_nhom
HAVING COUNT(DISTINCT cot_dieu_kien) = N;

Ví dụ: Tìm FirstRow có đủ 3 giá trị SecondRow là 10, 100, 300.

CREATE TABLE DifferentRows (FirstRow INT, SecondRow INT);
INSERT INTO DifferentRows VALUES (10,10), (10,100), (10,300), (20,100);

Dữ liệu:

+----------+-----------+
| FirstRow | SecondRow |
+----------+-----------+
|       10 |        10 |
|       10 |       100 |
|       10 |       300 |
|       20 |       100 |
+----------+-----------+

Truy vấn: FirstRow có cả 3 giá trị 10, 100, 300 ở SecondRow:

SELECT FirstRow
FROM DifferentRows
WHERE SecondRow IN (10, 100, 300)
GROUP BY FirstRow
HAVING COUNT(DISTINCT SecondRow) = 3;

Kết quả

+----------+
| FirstRow |
+----------+
|       10 |
+----------+

Giải thích:

  • WHERE ... IN lọc trước các hàng liên quan.
  • GROUP BY FirstRow gom theo nhóm.
  • HAVING COUNT(DISTINCT SecondRow) = 3 đảm bảo nhóm đó có đủ 3 giá trị distinct yêu cầu.

Mở rộng: Pattern này gọi là "Relational Division" (chia quan hệ) - tìm nhóm chứa TẤT CẢ các giá trị yêu cầu.