私はこのような3つのテーブルを持っています。 EAV SQLデザインでのクエリ
Entity_AttrVal
|e_id|av_id|
| 1 | 1 |
| 1 | 3 |
| 2 | 2 |
| 2 | 5 |
| 3 | 1 |
| 3 | 4 |
| 3 | 6 |
AttributeValue_Table
|av_id|prop_name |prop_value|
|1 | color | black |
|2 | color | white |
|3 | wing size| 7" |
|4 | whiskers | long |
|5 | whiskers | short |
|6 | random | anything |
Entity_Table
|e_id|e_name|e_type |e_tenant|
|1 | Bob | bird | owner_1|
|2 | Joe | cat | owner_1|
|3 | Joe | cat | owner_2|
私は何をすることができるようにしたいことはあるようなもの 'の実体を見つける場所e_name =' 短い=ジョー」と色=黒ひげ。
は私はつのプロパティの動作に照会、各行がエンティティ情報と共に、1小道具/値を有する結果セットを取得することができます。しかし、私は任意のNのプロパティを行うことができる必要があります。このようなことをするにはどうすればいいですか?
私は列か何か
EDIT2など、すべてのプロパティを持つテーブルを結合構築することができます:私はあなたがそれぞれの名前/値の組み合わせのための述語を追加する必要があり、この
SELECT et.e_id, et.e_name, et.e_type
FROM Entitiy_table et
LEFT JOIN Entity_AttrVal j ON et.e_id = j.e_id
RIGHT JOIN AttributeValue_Table at ON at.av_id = j.av_id
WHERE (av.prop_name='color' AND av.prop_value='white') OR (av.prop_name='whiskers' AND av.prop_value='long')
GROUP BY et.e_id, et.e_name, et.e_type
HAVING COUNT(*) = 2;
「任意のプロパティを実行する」とはどういう意味ですか?あなたの現在のクエリは何ですか?何が返され、何を返すのですか? –
N個の属性を持つ結果を得るには、テーブルをN回結合する必要があります。それは、EAVデータモデルが苦痛を感じている理由の1つです。新しい述語を追加するには、もう1組の結合を追加する必要があります。これにより、クエリが遅くなり、遅くなります。 –