【问题标题】:MusicBrainz SQL queryMusicBrainz SQL 查询
【发布时间】:2015-01-10 14:37:47
【问题描述】:

我正在使用musicbrainz.org postgresql 数据库,我已在本地安装并通过pgAdmin 访问。

数据库是音乐艺术家和相关标准的列表。 Here 是架构。

可以列出艺术家可能拥有的各种关系。例如。 Here 是指向麦当娜关系的链接,其中包括指向麦当娜维基百科页面和她的推特账号等的链接。

如何创建一个 SQL 查询来输出给定艺术家的所有关系?我试过了:

SELECT 
  url.url, 
  artist.name
FROM 
  musicbrainz.artist, 
  musicbrainz.url, 
  musicbrainz.link
WHERE 
  url.id = artist.id
ORDER BY
  url.url ASC;

但是,这些链接与正确的艺术家不相关。我是不是用错了钥匙?

【问题讨论】:

  • 根据您链接到的架构,url 表与任何其他表都没有任何关系。我找不到link 表。无论如何,我建议您在尝试找出这种复杂性的架构时使用显式 JOIN 语法。

标签: postgresql musicbrainz


【解决方案1】:

我查看了模型,但您缺少 l_artist_url 表:

SELECT url.url,
       artist.name
FROM artist
  JOIN l_artist_url ON artist.id = l_artist_url.entity0
  JOIN url ON url.id = l_artist_url.entity1
WHERE artist.name = '...'
ORDER BY url.url ASC

要获取与艺术家相关的事件,您可以使用以下内容:

SELECT event.name, 
       event_type.name
FROM artist
  JOIN l_artist_event ON artist.id = l_artist_event.entity0 
  JOIN event ON event.id = l_artist_event.entity1 
  join event_type ON event_type.id = event.type 
WHERE artist.name = '...'

【讨论】:

  • 谢谢,你能解释一下代码中的每个步骤对我有什么作用,以便我理解这个答案吗?
  • @alias51:这些只是基本(内部)连接。真的没什么好解释的。
  • @alias51 查询是不言自明的。这就是 MB 的数据模式的全部内容。 URL 保存在 url 表中,并通过 l_artist_url 链接到 artist 表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多