Sql 多对多数据关系的文本搜索
我知道这个问题在这里之前肯定已经得到了回答,但我就是找不到一个匹配的问题 使用像“%keyword%”这样的Sql 多对多数据关系的文本搜索,sql,tsql,many-to-many,Sql,Tsql,Many To Many,我知道这个问题在这里之前肯定已经得到了回答,但我就是找不到一个匹配的问题 使用像“%keyword%”这样的,我想在MSSQL数据库中搜索多对多数据关系,并将其简化为一对一的结果集。这两个表通过链接表连接。下面是我所说内容的一个非常简化的版本: Books: book_ id title 1 Treasure Island 2 Poe Collected Stories 3 Invest in Treasure Islands Categori
,我想在MSSQL数据库中搜索多对多数据关系,并将其简化为一对一的结果集。这两个表通过链接表连接。下面是我所说内容的一个非常简化的版本:
Books:
book_ id title
1 Treasure Island
2 Poe Collected Stories
3 Invest in Treasure Islands
Categories:
category_id name
1 Children
2 Adventure
3 Horror
4 Classic
5 Money
BookCategory:
book_id category_id
1 1
1 2
1 4
2 3
2 4
3 5
我要做的是在标题中搜索一个短语(例如,“%金银岛%”
),并获得匹配的图书记录,其中包含搜索字符串和每本书附带的单个最高匹配的类别
记录——我要丢弃较小的类别记录。换句话说,我在寻找这个:
book_id title category_id name
1 Treasure Island 4 Classic
3 Invest in Treasure Islands 5 Money
有什么建议吗?试试这个。筛选查找表,然后加入:
With maxCategories AS
(select book_id, max(category_id) as category_id from BookCategory group by book_id)
select Books.book_id, Books.Title, Categories.category_id, Categories.name
from Books
inner join maxCategories on (Books.book_id = maxCategories.book_id)
inner join Categories on (Categories.category_id = maxCategories.category_id)
where Books.title like '%treasure island%'
尝试:
非常感谢你的回答!您的答案和@N West的答案都给出了我想要的答案,在对这两个答案进行了彻底的测试之后,我看不到速度上的差异(我拥有的数据样本不是很大,所以可能还不会出现性能问题)。所以这两个答案似乎是相同的,但既然@N West对社区来说是新的,我就给他(或她)打勾。再次感谢!
select * from
(select b.*,
c.*,
row_number() over (partition by bc.book_id
order by bc.category_id desc) rn
from Books b
join BookCategory bc on b.book_id = bc.book_id
join Categories c on bc.category_id = c.category_id
where b.name like '%treasure island%') sq
where rn=1