帮助sql查询

时间:2011-04-01 20:12:46

标签: sql

您好 我是SQL的新手,所以想知道你们是否可以帮助我。

我有4张桌子

  • 艺术家(artistID,...)
  • 专辑(albumID,artistID,...)
  • song(songID,...)
  • albumsongs(songID,albumID)

以及在专辑和歌曲之间加入多对多的表格 - 专辑

基本上在我的专辑表中我有一个歌曲ID和一个专辑ID。

在专辑表中我有一个artistID。

我想列出属于特定艺术家的每首歌曲,即使它们之间没有直接的外键引用。从艺术家到歌曲的唯一真实链接是通过专辑。有可能使用某种高级查询魔法吗?

2 个答案:

答案 0 :(得分:7)

听起来像一个简单的多表连接:

select artist.name, album.title, song.title
from artist
     inner join album on album.artistid = artist.artistid
     inner join albumsongs on albumsongs.albumid = album.albumid
     inner join songs on songs.songid = albumsongs.songid
where artist.name = 'Pere Ubu'

答案 1 :(得分:2)

select distinct sng.*
from song sng
inner join albumsongs a_s on a_s.song_id = sng.id
inner join album alb on alb.id = a_s.album_id
inner join artist art on art.id = alb.artist_id
where art.name like '%NAME_CRITERIA_HERE%'

select * from song where id in (
    select a_s.song_id
    from albumsongs a_s
    inner join album alb on alb.id = a_s.album_id
    inner join artist art on art.id = alb.artist_id
    where art.name like '%NAME_CRITERIA_HERE%'
)