【发布时间】:2018-06-03 13:46:00
【问题描述】:
我正在使用 PostgreSQL 和 PgAdmin 4,并且正在使用 MusicBrainz 数据库。 我需要找到从未发布过共同版本的标签夫妇,但他们都发布了带有第三个标签的版本(两者的标签相同)。
在数据库中有这些表: label (id, name..) id 是主键。 release_label(id, release, label) id为主键,标签外键。
我已经尝试了自我加入,但它不起作用:
SELECT l1.name as label_1 , l2.name as label_2
FROM release_label as r1 INNER JOIN label as l1 ON r1.label=l1.id, label as l2
INNER JOIN (release_label as r2 LEFT JOIN release_label as r3
ON r3.label=r2.label)ON r2.label=l2.id WHERE r1.release != r2.release
AND r1.label!= r3.label AND r1.release=r3.release
GROUP BY label_1,label_2 ORDER BY label_1,label_2
感谢您的建议。
【问题讨论】:
-
一些示例数据会有所帮助,并且还可以考虑使您的问题比目前更小(如果这仍然可以让您的观点得到理解)。
-
@TimBiegeleisen 实际上这些表充满了数据。 Label 包含很多 ID 和名称,对于每个名称,在 release_label 中与另一个标签有一个或多个对应关系。
标签: sql postgresql pgadmin self-join musicbrainz