我有一个通过多个标签搜索数据的查询,我从这个问题多标签搜索查询中得到了这个想法。我有3个表,如书籍(id,标题…)。标签(id,名称),图书标签(id,图书id,标签id)。所以我使用我的查询来按标签选择书籍,但它没有给出任何结果。
书桌
id : title
1 : maths
2 : science
3 : HP
标记表
id : name
1 : a
2 : b
3 : c
boook\u标签表
id : book_id : tag_id
1 : 1 : 2
2 : 1 : 3
3 : 2 : 1
4 : 3 : 1
5 : 3 : 2
所以如果我搜索图书标签c,结果应该是图书id 1(数学)或者按c和a搜索,结果应该是图书id 1,2,3(数学,科学,惠普)
这是我的问题
SELECT books_tag.book_id, books_pre.title
FROM books_tag
JOIN books_pre ON books_tag.book_id = books_pre.id
JOIN tags ON books_tag.tag_id = tags.id
WHERE tags.name IN ('a', 'd')
GROUP BY books_tag.book_id
HAVING COUNT(books_tag.tag_id) = 2
3条答案
按热度按时间iecba09b1#
您应该使用count(distinct books\u tag.tag\u id)
qhhrdooz2#
尝试以下简短查询:
样本数据:
t-sql:
部分
name in (...)
指定要搜索的标记。6psbrbz93#
您尝试的查询是
AND
标准像得到那些有标签a和标签d的书,根据你的问题你不需要这个标准,只要删除groupby和having子句,你就可以了演示