MySQL:与具有一定数量特征的行相交

时间:2014-10-06 01:18:45

标签: mysql sql select intersect

这有点难以解释,但这里有。我有一个书籍数据库,里面有两个表。

一个用于唯一的图书关键字,即仅将ID归因于每个关键字:

id    |    keyword
______|____________
k1    |    drama
k2    |    thriller
k3    |    biography

一个用于将图书ID与关键字ID匹配(即每本图书的所有关键字):

book_id   |   keyword_id
__________|_____________
b1        |   k3
b2        |   k1
b2        |   k2

所以基本上,书" b1"有关键字"传记,"并预订" b2"有关键字"惊悚"和"传记"。

我的问题是:如果我有一个书籍ID(比如" b2"),我有办法在数据库中找到至少的其他书籍吗? 2个(或任何其他数字)匹配关键字与" b2"?所以在这个例子中,其他书籍也有" k1"和" k2"作为关键词?这将是一种查找相关书籍的方法。"

我欢迎任何帮助。如果您想要澄清我要问的内容,请告诉我。

1 个答案:

答案 0 :(得分:2)

是。实际上,您只需要第二个表格。

select bk.book_id, count(*)
from BookKeywords bk join
     BookKeywords bkb2
     on bkb2.book_id = 'b2' and
        bk.keyword_id = bkb2.keyword_id
group by bk.book_id
having count(*) >= 2;

如果您需要匹配关键字列表,可以添加group_concat(bk.keyword_id)