sql >> Database teknologi >  >> RDS >> Oracle

Forespørgsel på EAV SQL Design

Du skal tilføje et prædikat for hver navn/værdikombination:

  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')

(Jeg beklager, hvis min SQL Server-dialekt skinner igennem)

For at lave et vilkårligt antal sammenligninger, skal du generere SQL'en og udføre den.

Som sagt i en kommentar viser dette, at EAV er en smerte (et anti-mønster, virkelig), men jeg ved af erfaring, at nogle gange er der simpelthen ikke noget alternativ, hvis vi er bundet til en relationel database.




  1. MySQL Query får de sidste N rækker pr. gruppe

  2. cx_Oracle - DLL-indlæsning mislykkedes:%1 er ikke et gyldigt Win32-program. python

  3. Mysql:Fjern alle fremmednøgler programmatisk

  4. Opretter udløser, som kaster en undtagelse ved indsættelse