0

3 つのテーブルを持つ MYSQL Db があります。

  1. アーティスト(artist_id,name)
  2. アルバム (album_i,title) と 3 番目の相関テーブル:
  3. albums_artists (album_id, artist_id)

私の目標は、すべてのアーティストのリストを表示し、各アーティストの名前の横に、このアーティストがリリースしたすべてのアルバムのタイトルを表示することです。(アルバムは 1 人のアーティストのみに「属します」。もちろん、アーティストは複数のアルバムを持っている場合があります)

次のような結果が得られれば素晴らしいことです。

1 "ac/dc" 3 "let there be rock"
1 "ac/dc" 4 "high voltage"
2 "deep Purple" 45 "machine head"
2 "deep Purple" 49 "in rock"
3 "motorhead" 666 "スペードのエース" num

(各行の最初の数字は artist_id で、2 番目の数字は album_id です)。

そのための適切なクエリは何でしょうか?

4

4 に答える 4

1
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
于 2010-12-13T22:11:54.533 に答える
1
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
于 2010-12-13T22:12:14.763 に答える
0

このようなもの:

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
于 2010-12-13T22:09:28.350 に答える
0
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
于 2010-12-13T22:09:28.343 に答える