【发布时间】:2020-12-28 08:19:42
【问题描述】:
我在网站上找不到我的问题的答案。
我有 3 个表:data、tags 和 data_tag_rel。
数据
id data
------------------------------------
1 A string of long data A.
2 A string of long data B.
3 A string of long data C.
4 A string of long data D.
5 A string of long data E.
6 A string of long data F.
7 A string of long data G.
8 A string of long data H.
n Etc...
标签
id tag
------------
1 gold
2 silver
3 copper
4 emerald
5 steel
6 ruby
7 carbon
8 zinc
9 mercury
n Etc...
data_tag_rel
data tag
------------------
1 1
1 2
2 1
3 2
4 3
5 1
5 2
5 3
6 1
7 1
8 1
8 2
8 4
8 6
n n
如您所见,有数据和标签,还有一个关系表来确定哪些标签分配给哪些数据。这里的数据是关于矿物和岩石的。
我想要的查询是通过查看它们共同针对的数据 id 来选择与关系表中的一组更多标签相关的标签(id 和名称)。
例如,假设我分配了一个数据 id 8 与关系表中的标签 1:“gold”、2:“silver”、4:“ruby”和 6:“emerald”相关。所以现在我想查询常见的标签。如果我查询“gold”、“silver”,我希望得到返回:
A. “gold”、“silver”、“ruby”和“emerald”(包括搜索标签)。 要么 B. “ruby”和“emerald”(不包括搜索标签)。
目的是点击一个标签,看看有哪些其他标签与该点击的标签相关,它们共同相关的数据是什么,使用关系表作为指导。
到目前为止,我设法让它只搜索 1 个标签,但我无法让它适用于 2、3 或 n 个标签。
SELECT DISTINCT tags.tag FROM tags, data_tag_rel WHERE tags.id = data_tag_rel.tag AND data_tag_rel.data IN (SELECT data_tag_rel.data FROM data_tag_rel WHERE data_tag_rel.tag IN (SELECT tags.id FROM tags WHERE tags.tag IN ('gold')));
如何查询相关标签到这个数据库结构中包含 2 个或更多标签的列表?
非常感谢!
【问题讨论】:
标签: mysql sql join mariadb subquery