Oracle
 sql >> база данни >  >> RDS >> Oracle

Запитване в EAV SQL Design

Трябва да добавите предикат за всяка комбинация име/стойност:

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

(Извинявам се, ако диалектът ми на Sql Server блести)

За да направите произволен брой сравнения, ще трябва да генерирате SQL и да го изпълните.

Както беше казано в коментар, това показва, че EAV е болка (анти-модел, наистина), но знам от опит, че понякога просто няма алтернатива, ако сме обвързани с релационна база данни.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на асоциативен масив на ниво пакет в java

  2. Показване на имена на отдели с помощта на курсори. Създайте PL/SQL блок за показване на всички имена на отдели от таблицата на отделите с помощта на курсори

  3. Как да направите обвивка, която да връща нещо различно от референтен курсор

  4. ORA-30076:невалидно поле за извлечение за източник на извлечение

  5. Използване на референтен курсор на Oracle в Java без зависимост от Oracle