假如文章可加入多種標籤,要如何搜尋兩個以上的標籤,來取得這篇文章
例如:
文章1,有A標籤、B標籤、C標籤
文章2,有B標籤、C標籤
文章3,有C標籤
我要搜尋A標籤與B標籤,只會出現文章1
假如我的資料表如下
artical
id title text
1 test test
2 test test
2 test test
keyword
id word
1 A標籤
2 B標籤
3 C標籤
relation
id artical_id keyword_id
1 1 1
1 1 2
1 1 3
1 2 2
1 2 3
1 3 3
這樣可以只用sql做到嗎?還是只能用程式?
T-SQL可以用INTERSECT達到交集的效果
<pre class="c" name="code">
select a.* FROM [article] a INNER JOIN [relation] b ON a.[id]=b.[artical_id] WHERE b.[keyword_id] IN (SELECT [id] FROM [keyword] WHERE [word]='A標籤')
INTERSECT
select a.* FROM [article] a INNER JOIN [relation] b ON a.[id]=b.[artical_id] WHERE b.[keyword_id] IN (SELECT [id] FROM [keyword] WHERE [word]='B標籤')