我有一个存储报告的数据库,每个报告都有几个标签。标记和报告之间的关系存储在名为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);
答案 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并支付了一个额外的价值)。