0

良いタイトルを思いつく方法さえ知らなかったので、私の問題を正しい方法で説明できることを願っています:)

したがって、個人テーブルがあり、PersonKeywords テーブルを介してキーワードと N:N の関係があります。

次に、Search テーブルもあり、テーブル SearchKeywords を介してキーワードと N:N の関係があります。

これで、人物はキーワード A と B との関係を持つことができ、検索レコードはキーワード A と C との関係を持つことができます。

検索レコードが持っているキーワードの少なくとも 1 つ (この 'A' 内) を持っているので、結果セットにその人物が必要です。

また、「A」を持っている人、「C」を持っている人、「A」と「C」を持っている人が欲しいが、Bだけを持っている人は欲しくない.

つまり、2 つのリストで一致していますが、そのようなステートメントをどこから作成すればよいかわかりません...

4

2 に答える 2

1

Although I don't have very much information to work with, the following should at least help you...

SELECT s.SearchID, k.Keyword, p.PersonID, p.Name
FROM Search s
INNER JOIN SearchKeywords sk ON s.SearchID = sk.SearchID
INNER JOIN Keywords k ON sk.KeywordID = k.KeywordID
LEFT OUTER JOIN PersonKeywords pk ON k.KeywordID = pk.KeywordID
LEFT OUTER JOIN Person p ON pk.PersonID = p.PersonID
WHERE k.Keyword = 'mykeyword'
GROUP BY s.SearchID, k.Keyword, p.PersonID, p.Name
于 2012-10-31T09:55:11.620 に答える
1

じゃあ、3人で…

declare @persons table (id int identity(1,1), name varchar(10))
insert @persons (name) values ('Babs'),('Ken'),('Neville'),('Sue')

バブはAとB、ケンはAとC、ネビルはBのみ、スーはCのみ

declare @personkeywords table (personid int, keyword varchar(5))
insert @personkeywords values (1,'a'),(1,'b'),(2,'a'),(2,'c'),(3,'b'),(4,'c')

検索はAまたはCです

declare @searchkeywords table (searchid int, keyword varchar(5))
insert @searchkeywords values (1,'a'),(1,'c')

そう...

select distinct persons.*
from @persons persons
     inner join @personkeywords personkeywords on persons.id = personkeywords.personid
     inner join @searchkeywords searchkeywords on personkeywords.keyword = searchkeywords.keyword
where 
     searchkeywords.searchid = 1

与える

1     Babs
2     Ken
4     Sue
于 2012-10-31T09:52:35.813 に答える