Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Skonstruuj zapytanie MySQL ( tabela meta_key/meta_value)

Lubię podchodzić do tego za pomocą group by i having :

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;

Alternatywą jest join . Jeśli nie ma zduplikowanych wartości dla 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';

group by Metoda ma zaletę skalowalności i wyrażalności. Łatwo jest wyrazić wiele warunków (kolor nie jest czerwony, wyprodukowany w USA lub Chinach), które nie są zwykłą równością. Również dodatkowe warunki mają bardzo podobną wydajność.

Drugi prawdopodobnie działa lepiej (z odpowiednimi indeksami) w kilku warunkach.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. skopiuj wszystkie wiersze tabeli do innej tabeli

  2. Przyspieszenie (luzem) wstawiaj do MySQL za pomocą Pythona

  3. MySQL pobiera liczbę wierszy w tabeli innodb

  4. Powinowactwo między tekstem a listą słów kluczowych?

  5. ln:/usr/lib/libmysqlclient.18.dylib:Plik istnieje