Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menanyakan pada EAV SQL Design

Anda harus menambahkan predikat untuk setiap kombinasi nama/nilai:

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

(Saya minta maaf jika dialek Sql Server saya bersinar)

Untuk melakukan perbandingan dalam jumlah sewenang-wenang, Anda harus membuat SQL dan menjalankannya.

Seperti yang dikatakan dalam komentar, ini menunjukkan bahwa EAV menyebalkan (benar-benar anti-pola), tetapi saya tahu dari pengalaman bahwa terkadang tidak ada alternatif jika kita terikat ke database relasional.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migrasi Data Dari Oracle Ke SQL Server

  2. Setel batas waktu koneksi basis data dengan Python

  3. Buffer string karakter kesalahan terlalu kecil di Oracle Stored Procedure

  4. OracleCommand dengan OracleDependency menunggu selamanya

  5. Oracle Style Bergabung di SQL Server