0

假设您有一个数据库表,它充当其他两个表之间的链接。在这种情况下,书和标签之间的链接,例如“小说”或“园艺”。如果我们有以下数据集:

Book_id | tag_id
----------------
1       | 13
1       | 43
1       | 15
2       | 13
2       | 25

您会运行哪种查询来表示“仅查找具有标签 13、43 和 15 链接的书籍”?也就是说,您添加的标签越多,显示的书籍数量就越少。

我希望这是有道理的。提前感谢您的时间和帮助!

4

3 回答 3

1

尝试这个

SELECT
  Book_id
FROM
  book_tags
GROUP BY
  Book_id
HAVING 
  SUM( CASE WHEN tag_id IN (13, 43, 15) THEN 1 END ) >= 3

您只需要具有标签的书籍13, 43, 15(全部),它会返回book_id = 1您的结果。SUM() >= 3指定您正在搜索的标签总数,在本例中为3,即13, 43, 15

SQLFIDDLE

于 2013-05-09T17:36:41.583 回答
0

如果我正确理解你的问题......像这样:

SELECT `Book_id` FROM `table` WHERE `tag_id` IN (13,43,25) LIMIT 0, 10;
于 2013-05-09T17:21:01.957 回答
0

你可以尝试这样的事情:

select book_table.* from book_table, link_table where book_table.id = link_table.book_id and link_table.tag_id in (13, 43, 15)

如果你的书有单独的桌子..

于 2013-05-09T17:21:48.983 回答