mysql - 获取与列表(数组)中精确值匹配的记录
问题描述
我有 3 个表(报告、标签、report_has_tags),需要选择只提到标签的记录。下面是我正在使用的查询
SELECT r.*, rt.report_id, GROUP_CONCAT(rt.tag_id) as tag_ids, GROUP_CONCAT(t.tag_name) as tag_names
FROM report r
LEFT JOIN report_has_tag rt ON r.id=rt.report_id
LEFT JOIN tags t ON rt.tag_id=t.id
WHERE r.id in (select report_id from report_has_tag where tag_id IN (1,2) group by report_id having count(1) >1 )
GROUP BY r.id
LIMIT 990 OFFSET 0
此查询返回包含标签 1,2 的所有记录以及包含标签 3,4 的记录。我只需要带有标签 1、2 的记录,而不是 3 或其他标签。请参阅附图https://ibb.co/Gdr6TDF
解决方案
然后改变
having count(1) >1
到
having count(1)=2 and not exists (select report_id from report_has_tag where tag_id not IN (1,2))
我的版本测试是否正好有两个标签与给定记录关联,并且没有其他标签与之关联。
推荐阅读
- angular - 从手风琴中删除填充
- javascript - 使用 React Router 设置工作 URL
- java - spring boot应用扩容后如何在H2数据库中保持数据一致性
- wordpress - 在没有有效网站的情况下注册 Amazon Affiliates
- ihp - 一对零或一关系
- random-forest - 在 XG 提升中,树是否会继续增长,直到叶子节点是纯的?
- asp.net-core - .NET Core 创建新产品 - 结果始终是 Product {Id: -2147482647}
- python - asyncio.Lock() 不提供互斥
- unity3d - 是否可以使用文本将 Debug.Log 中打印的任何内容显示到场景中?
- arrays - 如何在swift中全局更改struct中的值