Mysql
 sql >> база данни >  >> RDS >> Mysql

Конструирайте MySQL заявка (таблица meta_key/meta_value)

Обичам да подхождам към тях с помощта на group by и 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;

Алтернатива е join . Ако няма дублиращи се стойности за 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 методът има предимството на мащабируемост и изразимост. Лесно е да се изразят много условия (цветът не е червен, произведен в САЩ или Китай), които не са просто равенство. Освен това допълнителните условия имат много сходна производителност.

Вторият вероятно се представя по-добре (с правилните индекси) при няколко условия.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване на произволни числа в таблица в MYSQL

  2. Как да променя MySQL колона, за да разреша NULL?

  3. flask-login:не мога да разбера как работи

  4. IO.FileNotFoundException в MySql.Data.dll:Не мога да заредя System.Security.Permissions

  5. MySQL - Изберете ред, ако се появи повече от x пъти в друга таблица