質問

私は私の主テーブルに関する属性保存の基本的な「プロパティバッグ」テーブル持っている「カードを。」私はカードのいくつかの高度な検索をやって起動したいときに、私はこのような何かを行うことができます:

SELECT dbo.Card.Id, dbo.Card.Name
  FROM dbo.Card
         INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
 WHERE dbo.CardProperty.IdPrp = 3 AND dbo.CardProperty.Value = 'Fiend'
INTERSECT
  SELECT dbo.Card.Id, dbo.Card.Name
  FROM dbo.Card
         INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
 WHERE (dbo.CardProperty.IdPrp = 10 AND (dbo.CardProperty.Value = 'Wind' OR dbo.CardProperty.Value = 'Fire'))

私は何をする必要があることは、理想的に私は、プロパティ/値の組み合わせのリストを渡すと、検索の結果を得ることができるように、ストアドプロシージャのいくつかの種類には、このアイデアを抽出することである。

最初は、この結果は、クエリ内のすべての要素に一致しなければならないことを意味する「厳格な」サーチになるだろうが、私もそれがで結果のいずれかにマッチするように、「緩い」クエリをしたいのですがクエリます。

私はかなりこの1のまわりで私の頭を包むように見えることはできません。この私の以前のバージョンでは、その中のAND / OR句の多くで実行するためのいくつかの大規模なSQLクエリを生成やることだったが、私はこの時、もう少しエレガントな何かを望んでいます。どのように私はこれをやって行くのですか?

役に立ちましたか?

解決

あなたがここに EAV のモデルを持っているように私には思えます。 SQL Server 2005を使用してアップしている場合、私はあなたがこのためのXMLデータ型を使用することをお勧めしたい。

http://weblogs.sqlteam.com/mladenp /archive/2006/10/14/14032.aspxする

は、検索およびXML照会機能を内蔵した方がはるかに簡単なものになります。

あなたはこれを見て、あなたのモデルを変更することができない場合:

http://weblogs.sqlteam.com/davidm/articles/12117.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top