プライマリ テーブル「カード」に関する属性を格納する基本的な「プロパティ バッグ」テーブルがあります。したがって、カードの高度な検索を開始したい場合は、次のようにすることができます。
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 クエリを生成することでしたが、今回はもう少し洗練されたものにしたいと考えています。どうすればこれを行うことができますか?