我有一个存储报表的数据库,每个报表都有几个标记。标记和报表之间的关系存储在名为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);

最佳答案

可以通过连接来执行此操作:

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 Fiddle(尽管使用Postgres并支付一个附加值)。

10-06 00:31