Domanda

Ho un DB MySQL con 3 tavoli:

  1. artisti (artist_id, nome)
  2. album (album_i, titolo) e una terza tabella di concordanza:
  3. albums_artists (album_id, artist_id)

Il mio obiettivo è quello di visualizzare un elenco di tutti gli artisti e accanto al nome di ogni artista, i titoli di tutti gli album di questo artista rilasciato. (Un album "appartiene" ad un solo artista, un artista può avere più di un album, naturalmente)

Sarebbe bello se un potrebbe ottenere un risultato simile:

1 "AC / DC" 3 "Let There Be Rock"
1 "ac / dc" 4 "alta tensione"
2 45 "Machine Head"
"Deep Purple" 2 49 "in rock"
"Deep Purple" 3 "Motorhead" 666 "l'asso di picche" num

(Il primo numero in ciascuna fila essendo l'artist_id, e la seconda l'album_id).

Quale sarebbe la query appropriata per questo?

È stato utile?

Soluzione

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

Altri suggerimenti

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

E, solo per divertimento, cosa succede se c'è un artista che non ha ancora rilasciato alcun Album.

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
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

Qualcosa di simile a questo:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top