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

Xây dựng truy vấn MySQL (bảng meta_key / meta_value)

Tôi muốn tiếp cận chúng bằng cách sử dụng nhóm group byhaving :

select id
from t
where (meta_key = 'color' and meta_value = 'red') or
      (meta_key = 'price' and meta_value = '10')
group by id
having count(distinct meta_key) = 2;

Một lựa chọn thay thế là join . Nếu không có giá trị trùng lặp nào cho một id :

select id
from t tc join
     t tp
     on tc.id = tp.id and
        tc.meta_key = 'color' and tc.meta_value = 'red' and
        tp.meta_key = 'price' and tp.meta_value = '10';

Nhóm group by phương pháp này có lợi thế về khả năng mở rộng và khả năng diễn đạt. Có thể dễ dàng thể hiện nhiều điều kiện (màu không đỏ, sản xuất tại Mỹ hoặc Trung Quốc) không đơn giản là bình đẳng. Ngoài ra, các điều kiện bổ sung có hiệu suất rất giống nhau.

Thứ hai có thể hoạt động tốt hơn (với các chỉ mục phù hợp) trên một số điều kiệ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. Kết nối với MySQL Server trên localhost thông qua Docker

  2. Tối ưu hóa MySQL cho ALTER TABLE của InnoDB

  3. Tập lệnh PHP sẽ không kết nối với cơ sở dữ liệu?

  4. Làm cách nào để lập lịch truy vấn MySQL?

  5. Cập nhật MySql sau khi chèn nodejs