我正在用 Python(Flask) 创建一个简单的书签管理 web 应用程序,但主要是为了获得 SQL 方面的经验(使用 sqlite)。我正在使用标签,我们可以以多对多的方式链接到书签(类似于 stackoverflow 问题)。我创建了 3 个表,如下所示:
bookmarks :
bm_id | bm_title | bm_link
1 | bm_title1 | bm_link1
2 | bm_title2 | bm_link2
3 | bm_title3 | bm_link3
4 | bm_title4 | bm_link4
tags :
bm_id | t_name
1 | t_name1
2 | t_name2
3 | t_name3
4 | t_name4
bookmarktag :
bmt_id | bookmark_id | tag_id
3 | 3 | 3
5 | 3 | 2
6 | 4 | 3
7 | 4 | 2
1 | 1 | 1
2 | 1 | 2
4 | 3 | 1
8 | 2 | 3
我知道如何列出与特定标签关联的所有书签。
但是我想知道如何列出 2 个特定标签共有的书签。 例如,如果我要搜索标签 2 和 3 共有的书签;它应该只显示书签 3 和 4。
我只能使用 SELECT * FROM bookmarktag bmt WHERE bmt.tag_id=2 OR bmt.tag_id=3;
列出与标签 2 和 3 关联的所有书签。但您可能知道,它列出了链接到标签 2 和 3 的所有书签。
谢谢!
最佳答案
许多集合操作可以通过 compound queries 完成:
SELECT *
FROM bookmarks
WHERE bm_id IN (SELECT bookmark_id FROM bookmarktag WHERE tag_id = 2
INTERSECT
SELECT bookmark_id FROM bookmarktag WHERE tag_id = 3)
关于sql - 在sqlite多对多示例中,如何获取2个标签共有的书签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23152030/