mysql recuperare dati da tabelle 2 tramite una tabella di correlazione
-
09-10-2019 - |
Domanda
Ho un DB MySQL con 3 tavoli:
- artisti (artist_id, nome)
- album (album_i, titolo) e una terza tabella di concordanza:
- 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?
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