Currently I am trying to return a three table join to find duplicate track titles that are in my a “track” table, and also return the track number | cd title from the other joined tables. My select statement is currently returning all the information from the joined tables but its not showing only the duplicates.
I have also tried using a group by and having clause to try to find a COUNT of comptitle. When I tried that it returned the an empty table.
My Tables:
x
CREATE TABLE composition (compid, comptitle, ,
PRIMARY KEY (compid), );
CREATE TABLE recording (rcdid, , compid,
PRIMARY KEY (rcdid, compid), );
CREATE TABLE cd (cdid, cdtitle, ,
PRIMARY KEY(cdid), );
CREATE TABLE track (cdid, trknum, , rcdid, compid,
PRIMARY KEY (cdid, trknum), );
My statement:
SELECT comptitle, trknum, cdtitle
FROM track JOIN recording ON track.rcdid = recording.rcdid
JOIN composition ON recording.compid = composition.compid
JOIN cd ON cd.cdid = track.cdid;
Output expected | actual:
EXPECTED:
comptitle | trknum | cdtitle
--------------------------------------------
Cousin Mary | 2 | Giant Steps
Cousin Mary | 10 | Giant Steps
Giant Steps | 1 | Giant Steps
Giant Steps | 8 | Giant Steps
ACTUAL:
comptitle | trknum | cdtitle
----------------------------+--------+-------------
Giant Steps | 8 | Giant Steps
Giant Steps | 1 | Giant Steps
Stomp of King Porter | 1 | Swing
Sing a Study in Brown | 2 | Swing
Cousin Mary | 14 | Swing
Cousin Mary | 10 | Giant Steps
Advertisement
Answer
You can use window functions:
SELECT comptitle, trknum, cdtitle
FROM (SELECT comptitle, trknum, cdtitle,
COUNT(*) OVER (PARTITION BY comptitle) as cnt
FROM track t JOIN
recording r
ON t.rcdid = r.rcdid JOIN
composition c
ON r.compid = c.compid JOIN
cd
ON cd.cdid = t.cdid
) t
WHERE cnt >= 2
ORDER BY cnt, comptitle;