sql >> データベース >  >> RDS >> Oracle

EAVSQLデザインのクエリ

    名前と値の組み合わせごとに述語を追加する必要があります:

      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. MySQL、RailsActiveRecordの日付グループとタイムゾーン

    2. 情報スキーマと主キー

    3. SQL Server で時差を分単位で計算する

    4. mysqlテーブルの一意の電子メールアドレスに基づく一意のコード?