1

プライマリ テーブル「カード」に関する属性を格納する基本的な「プロパティ バッグ」テーブルがあります。したがって、カードの高度な検索を開始したい場合は、次のようにすることができます。

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

私がする必要があるのは、このアイデアをある種のストアド プロシージャに抽出することです。これにより、理想的には、プロパティと値の組み合わせのリストを渡して検索結果を取得できるようになります。

最初は、これは結果がクエリ内のすべての要素と一致する必要があることを意味する「厳密な」検索になりますが、クエリ内のすべての結果と一致するように「緩い」クエリも必要です。

私はこれについて頭を包むことができないようです。以前のバージョンでは、大量の AND/OR 句を使用して実行する大規模な SQL クエリを生成することでしたが、今回はもう少し洗練されたものにしたいと考えています。どうすればこれを行うことができますか?

4

1 に答える 1

4

ここに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

于 2009-01-19T18:08:17.223 に答える