首页 > 解决方案 > 获取与列表(数组)中精确值匹配的记录

问题描述

我有 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

标签: mysql

解决方案


然后改变

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))

我的版本测试是否正好有两个标签与给定记录关联,并且没有其他标签与之关联。


推荐阅读