2016-05-01 7 views
1

Ich habe eine Datenbank, die Berichte speichert, und jeder Bericht hat mehrere Tags. Die Beziehung zwischen Tags und Berichten wird in einer Tabelle namens report_tags gespeichert.Mysql Abfrage "Berichte" mit mehreren gleichen Tags

Wie Sie sehen können, haben Report 39 und 40 zwei gleiche Tags. Ich will sie als Ergebnis.

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

Antwort

1

Sie können dies tun mit beitritt:

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 eine SQL Fiddle ist (wenn auch Postgres mit einem zusätzlichen Wert bezahlt verwenden).

+0

Leider bekomme ich keine Ergebnisse zu dieser Abfrage. Ich habe meiner Frage einige Werte hinzugefügt. Wie Sie sehen können, haben Bericht 39 und 40 mehrere gleiche Tags. Das sind die Ergebnisse, die ich als Ergebnis – Macster

+0

@Macster will. . . Ich denke, ich habe es das erste Mal übertrieben. Das obige sollte funktionieren. –

+0

Gemäß der Spezifikation ist COUNT (*) nur am Ende – Strawberry

Verwandte Themen