mysql извлекает данные из 2 таблиц через корреляционную таблицу - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть база данных MYSQL с 3 таблицами:

  1. художники (artist_id, имя)
  2. альбомов (album_i, название) и третья корреляционная таблица:
  3. album_artists (album_id, artist_id)

Моя цель - показать список всех исполнителей и рядом с именем каждого исполнителя названия всех альбомов, выпущенных этим исполнителем. (Альбом «принадлежит» только одному исполнителю, у исполнителя, конечно, может быть несколько альбомов)

Было бы замечательно, если бы a мог получить такой результат, как:

1 "AC / DC" 3 "Пусть будет рок"
1 "AC / DC" 4 "высокое напряжение"
2 "темно-фиолетовый" 45 "головка машины"
2 "темно-фиолетовый" 49 "в скале"
3 "мотороголовка" 666 "туз пик" num

(первый номер в каждом ряду - это artist_id, а второй - album_id).

Какой будет соответствующий запрос для этого?

Ответы [ 4 ]

1 голос
/ 14 декабря 2010
select
  artist_id,
  album_id,
  ...
from
  albums_artists
join albums on albums.id = albums_artists.album_id
join artists on artists.id = albums_artists.artist_id
1 голос
/ 14 декабря 2010
SELECT ar.artist_id, ar.name, al.album_id, al.title
    FROM artists ar
        INNER JOIN albums_artists aa
            ON ar.artist_id = aa.artist_id
        INNER JOIN albums al
            ON aa.album_id = al.album_id
    ORDER BY ar.name, al.title

И, ради интереса, что, если есть артист, который еще не выпустил ни одного альбома.

SELECT ar.artist_id, ar.name, al.album_id, al.title
    FROM artists ar
        LEFT JOIN albums_artists aa
            INNER JOIN albums al
                ON aa.album_id = al.album_id
            ON ar.artist_id = aa.artist_id
    ORDER BY ar.name, al.title
0 голосов
/ 14 декабря 2010

Примерно так:

select ar.artist_id, ar.name, al.album_id, al.title
  from artists ar
  join album_artists aa on aa.artist_id = ar.artist_id
  join albums al on al.album_id = aa.album_id and ar.artist_id = aa.artist_id
order by ar.artist_id
0 голосов
/ 14 декабря 2010
select a.artist_id, a.name, al.album_id, al.title
from artists a, albums al, albums_artists ala
where a.artist_id = ala.artist_id
and ala.album_id = al.album_id
order by ala.artist_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...