sql >> Database teknologi >  >> RDS >> Mysql

Konstruer MySQL-forespørgsel (meta_key/meta_value-tabel)

Jeg kan godt lide at nærme mig disse ved at bruge group by og 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;

Et alternativ er en join . Hvis der ikke er nogen duplikerede værdier for et 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 fordelen af ​​skalerbarhed og udtryksevne. Det er let at udtrykke mange forhold (farven er ikke rød, fremstillet i USA eller Kina), som ikke er simpel lighed. Yderligere betingelser har også meget lignende ydeevne.

Den anden klarer sig sandsynligvis bedre (med de rigtige indekser) på et par forhold.




  1. Få avancerede brugerdefinerede felters repeaterfeltværdi baseret på en anden repeaterværdi

  2. MySQL Brug for hjælp til at konstruere forespørgsel:sammenføj flere tabeller i en enkelt række

  3. Sådan finder du de underliggende primære (eller unikke) nøglekolonner fra en Oracle-visning

  4. Hvorfor semikolon ikke kunne placeres i CommandText af en OracleCommand, når C#