sql >> Database >  >> RDS >> Oracle

Query's uitvoeren op EAV SQL Design

U moet een predikaat toevoegen voor elke naam/waarde-combinatie:

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

(Mijn excuses als mijn Sql Server-dialect doorschijnt)

Om een ​​willekeurig aantal vergelijkingen te maken, moet u de SQL genereren en uitvoeren.

Zoals in een opmerking gezegd, laat dit zien dat EAV lastig is (eigenlijk een anti-patroon), maar ik weet uit ervaring dat er soms gewoon geen alternatief is als we gebonden zijn aan een relationele database.




  1. Kan MySQL BIT-veldwaarde niet zien bij gebruik van SELECT

  2. Hoe een dubbele sleutelfout in T-SQL (SQL Server) te negeren

  3. OAuth gebruiken om uw ODBC-verbinding met Salesforce.com te verifiëren

  4. Hoe krijg ik een waarde uit de laatst ingevoegde rij?