sql >> Databáze >  >> RDS >> Oracle

Dotaz na EAV SQL Design

Ke každé kombinaci jména/hodnoty musíte přidat predikát:

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

(Omlouvám se, pokud můj dialekt serveru SQL prosvítá)

Chcete-li provést libovolný počet porovnání, museli byste vygenerovat SQL a provést jej.

Jak bylo řečeno v komentáři, ukazuje to, že EAV je bolest (opravdu anti-vzor), ale ze zkušenosti vím, že někdy prostě neexistuje žádná alternativa, pokud jsme vázáni na relační databázi.




  1. Instalace SQL Server 2017 krok za krokem -2

  2. Vylepšete způsob, jak získat počet výskytů pro každou odlišnou hodnotu skupiny Concat Mysql

  3. Jak najít top 3 topera každého předmětu v dané tabulce

  4. jak zakázat současná připojení jedním uživatelem na oracle