Mysql查询"报告"有几个相同的标签

时间:2016-05-01 17:00:33

标签: mysql tags

我有一个存储报告的数据库,每个报告都有几个标签。标记和报告之间的关系存储在名为report_tags的表中。

如您所见,报告39和40有两个相同的标签。结果我想要它们。

    CREATE TABLE IF NOT EXISTS `report_tags` (
  `Report_ID` int(5) NOT NULL,
  `Tag_ID` int(5) NOT NULL,
  PRIMARY KEY (`Report_ID`,`Tag_ID`),
  KEY `tagid_fk` (`Tag_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `report_tags` (`Report_ID`, `Tag_ID`) VALUES 
(22, 8),(32, 8),(33, 8),(38, 8),(37, 244),(37, 245),(38, 246),(38, 247),(38, 248),(39, 249),(39, 250),(39, 251),(40, 251),(39, 252),(40, 252);

1 个答案:

答案 0 :(得分:1)

您可以使用连接执行此操作:

select rt1.report_id, rt2.report_id, count(*) as numtagsincommon
from report_tags rt1 join
     report_tags rt2
     on rt1.tag_id = rt2.tag_id and rt1.report_id < rt2.report_id 
group by rt1.report_id, rt2.report_id
having count(*) > 1;

Here是一个SQL小提琴(虽然使用Postgres并支付了一个额外的价值)。