我目前使用的软件在SQL表中的对象和标签之间存在关系,如下所示:
+-----------+--------+
| object_id | tag_id |
+-----------+--------+
| 226 | 31 |
| 226 | 35 |
| 313 | 31 |
| 312 | 35 |
+-----------+--------+
对于以下请求,可以使用逻辑 OR 获取标签 ID 列表的所有对象 ID:
select distinct object_id from tags_link where tag_id in (31, 35);
如何获取具有逻辑 AND 的标签 ID 列表的所有对象 ID?
对于上表,对标记 ID 31 和 35 的请求应仅返回object_id 226。
select object_id
from tags_link
where tag_id in (31,35)
group by object_id
having count(distinct tag_id) = 2
select object_id from tags_link where tag_id = 31
intersect
select object_id from tags_link where tag_id = 35