SQL-запрос MusicBrainz

Я использую базу данных musicbrainz.org postgresql, которую я установил локально и получил доступ через pgAdmin.

База данных представляет собой список музыкальных исполнителей и связанных с ними критериев. Вот схема.

Можно перечислить различные отношения, которые могут быть у художника. Например. Здесь находится ссылка на отношения Мадонны, в том числе ссылка на страницу Мадонны в Википедии и ее адрес в Твиттере среди прочего.

Как я могу создать SQL-запрос, который выведет все отношения для данного исполнителя? Я пытался:

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

Однако эти ссылки не соотносятся с правильным исполнителем. Я использую неправильный ключ?


person alias51    schedule 10.01.2015    source источник
comment
Согласно схеме, с которой вы связались, таблица url вообще не имеет отношения ни к какой другой таблице. Я не могу найти таблицу link. В любом случае я предлагаю вам использовать явный синтаксис JOIN, когда вы пытаетесь понять схему такой сложности.   -  person O. Jones    schedule 10.01.2015


Ответы (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 = '...'
person a_horse_with_no_name    schedule 10.01.2015
comment
Спасибо, не могли бы вы объяснить, что каждый шаг в коде делает для меня, чтобы я мог понять этот ответ? - person alias51; 11.01.2015
comment
@ alias51: это просто базовые (внутренние) соединения. Не так много, чтобы объяснить на самом деле. - person a_horse_with_no_name; 11.01.2015
comment
@ alias51 Запрос не требует пояснений. Это все о схеме данных MB. URL-адреса сохраняются в таблице url и связаны с таблицей исполнителя через l_artist_url. - person SuN; 22.01.2015