sql >> Databasteknik >  >> RDS >> Mysql

Konstruera MySQL-fråga (meta_key/meta_value-tabell)

Jag gillar att närma mig dessa med group by och 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;

Ett alternativ är en join . Om det inte finns några dubbletter av värden för ett 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 Metoden har fördelen av skalbarhet och uttryckbarhet. Det är lätt att uttrycka många förhållanden (färgen är inte röd, tillverkad i USA eller Kina) som inte är enkel jämlikhet. Ytterligare villkor har också mycket liknande prestanda.

Den andra presterar förmodligen bättre (med rätt index) på ett par villkor.




  1. Är Intel dömd i serverns CPU-utrymme?

  2. Laravel sammanfogar med 3 bord

  3. MySql:om värdet finns UPPDATERA annars INFOGA

  4. SQLiteException:okänd databas