多标签搜索查询不工作

kninwzqo  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(299)

我有一个通过多个标签搜索数据的查询,我从这个问题多标签搜索查询中得到了这个想法。我有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
iecba09b

iecba09b1#

您应该使用count(distinct books\u tag.tag\u id)

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(distinct books_tag.tag_id) = 2
qhhrdooz

qhhrdooz2#

尝试以下简短查询:
样本数据:

create table Books(id int, title varchar(10));
insert into Books values
(1, 'maths'),
(2, 'science'),
(3, 'HP');
create table Tag(id int, name char(1));
insert into Tag values                            
(1, 'a'),
(2, 'b'),
(3, 'c');
create table Book_tag(id int, book_id int, tag_id int);
insert into Book_tag values
(1, 1, 2),
(2, 1, 3),
(3, 2, 1),
(4, 3, 1),
(5, 3, 2);

t-sql:

select distinct book_id from Book_tag bt
where exists(select 1 from Tag
             where id = bt.tag_id
                   and name in ('c', 'a'));

部分 name in (...) 指定要搜索的标记。

6psbrbz9

6psbrbz93#

您尝试的查询是 AND 标准像得到那些有标签a和标签d的书,根据你的问题你不需要这个标准,只要删除groupby和having子句,你就可以了

SELECT DISTINCT b.*
FROM books_pre b
JOIN books_tag bt ON bt.book_id = b.id
JOIN tags t ON bt.tag_id = t.id
WHERE t.name IN ('a', 'b')

演示

相关问题