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