sql >> Databasteknik >  >> RDS >> Oracle

Fråga på EAV SQL Design

Du måste lägga till ett predikat för varje namn/värdekombination:

  SELECT <whatever you need>
    FROM Entity_Table et
   WHERE et.e_name = 'Joe'
     AND EXISTS (SELECT 1 
                   FROM AttributeValue_Table avt
                   JOIN Entity_AttrVal ea ON ea.e_id = et.e_id
                  WHERE ea.a_id = avt.av_id
                    AND avt.prop_name = 'color'
                    AND avt.prop_value = 'black')
     AND EXISTS (SELECT 1 
                   FROM AttributeValue_Table avt
                   JOIN Entity_AttrVal ea ON ea.e_id = et.e_id
                  WHERE ea.a_id = avt.av_id
                    AND avt.prop_name = 'whiskers'
                    AND avt.prop_value = 'short')

(Jag ber om ursäkt om min SQL Server-dialekt lyser igenom)

För att göra ett godtyckligt antal jämförelser, måste du generera SQL och köra den.

Som sagt i en kommentar visar detta att EAV är en smärta (ett anti-mönster, verkligen), men jag vet av erfarenhet att det ibland helt enkelt inte finns något alternativ om vi är bundna till en relationsdatabas.




  1. hur många typer av joins finns det i mysql eller sql

  2. MySQL-procedur inom en Select?

  3. Kompilerar PHP 5.1.6 med PDO MySQL

  4. Lägg Mysql-frågeresultat i array i en klass