私の問題のドメインは広告です。そのために、というテーブルを含むデータベースがありますADVERT
。広告にはファセット(つまり、準分類学的な説明用語)を含めることができます。したがって、FACET
ファセットを定義するFACETTERM
テーブルと、各ファセットの値を含むテーブルがあります。 ADVERTFACETTERMASSIGNMENT
どのファセット用語の値がどの広告に割り当てられているかを示すリンクテーブルです。
つまり、「Make」ファセットに「Honda」、「Location」ファセットに「Sussex」という値を持つ車の広告があるかもしれません。したがって、広告がadvert{PK = 14}
であり、Hondaがファセットターム{PK = 1}
であり、Sussexがファセットタームである場合、と{PK = 2}
の行を期待します。ADVERTFACETTERMASSIGNMENT { AdvertId, FacetTermId }: 14, 1
14, 2
この取り決めを考えると、サセックスでホンダのための他のすべての広告を見つけるにはどうすればよいですか?言い換えるとADVERTFACETTERMASSIGNMENT
、特定の広告のそのテーブルの行と一致するが、その広告の行ではない行のセットを見つけるにはどうすればよいですか?
SQL Server 2008を使用しています。IN句を使用してみましたが、部分一致が返されます。つまり、Sussex以外のすべてのHondaと、Honda以外のSussexのすべての車などです。
要件を言い換えると、ADVERTFACETTERMASSIGNMENT
それらの行に少なくとも別の特定の広告のファセットタームIDと同じファセットタームIDが含まれているすべての行を見つける必要があります。選択したコンパレータ、広告と少なくともまったく同じファセットタームがあれば、ファセットタームが多いかどうかは関係ありません。