我甚至不知道如何提出一个好的头衔,所以我希望我能以正确的方式描述我的问题:)
所以我有一个人员表,它通过表PersonKeywords与关键字有N:N的关系。
然后我也有一个搜索表,它通过表格SearchKeywords与关键字有N:N的关系。
现在,此人可以与关键字A和B建立关系,搜索记录可以与关键字A和C建立关系。
现在我想要结果集中的人,因为搜索记录中至少有一个(在此'A'中)关键字。
我也想要那个拥有'A'的人,一个'C'的人,一个'A'和'C'的人,而不是那个只有B的人。
所以这是两个列表上的匹配,但我不知道从哪里开始创建这样的声明......
答案 0 :(得分:1)
所以你有三个人......
declare @persons table (id int identity(1,1), name varchar(10))
insert @persons (name) values ('Babs'),('Ken'),('Neville'),('Sue')
Babs有A和B,Ken有A和C,Neville只有B而Sue只有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
答案 1 :(得分:1)
虽然我没有太多可以使用的信息,但以下内容至少可以帮助您......
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