- 爱易网页
 
                        - 
                            MSSQL教程
 
                        - 头晕,跨5个表的查询!求救!该如何解决 
 
                         
                    
                    
                    日期:2014-05-18  浏览次数:20746 次 
                    
                        
                         头晕,跨5个表的查询!求救!
表A:   Artist   (歌手表) 
 ============================ 
 ID                     Name 
 -------      ------- 
 1                        张学友 
 ... 
  
 表B:   Album   (专辑表) 
 ============================ 
 ID                     Name 
 -------      ------- 
 1                        群星荟萃 
 2                        吻别 
 3                        张学友93演唱会 
 ... 
  
 表C:   Song   (歌曲表) 
 ============================ 
 ID                     Name 
 -------      ------- 
 1                        每天爱你多一些 
 2                        吻别 
 3                        爱火花 
  
 表D:   Artist_Album   (歌手与专辑关联表,多对多关系) 
 ============================ 
 ArtistID   AlbumID 
 -------      ------- 
 1                        1 
 1                        2 
 1                        3 
  
 表E:   Album_Song   (专辑与歌曲关联表,多对多关系) 
 ============================ 
 AlbumID      SongID 
 -------      ------- 
 1                        2 
 2                        2 
 2                        3 
 3                        2 
 3                        3 
  
 表F:   Song_URL   (歌曲下载链接关联表,一对多关系) 
 ============================ 
 ID                     SongID         URL 
 -------      -------      -------- 
 1                        1                        http://... 
 2                        1                        http://... 
 3                        3                        http://... 
 4                        3                        http://... 
 5                        3                        http://... 
  
 跨5个表查询:   查询歌手ID为   1   的所有含有下载链接歌曲的专辑列表! 
  
 是不是感觉很绕啊!是啊,我就是被绕晕了,高手帮忙啊! 
  
 思路    
 1,通过歌手ID找到所有歌手的专辑列表 
 2,通过每张专辑的ID找到每张专辑的歌曲列表 
 3,通过歌曲ID查询下载链接表是否有下载链接 
 如果一张专辑下所有歌曲都没有下载链接则不显示这张专辑 
 如果一张专辑下任意一首歌有下载链接则显示此专辑
------解决方案--------------------
declare @ArtistID varchar(32) --歌手ID 
 set @ArtistID=1   
 select AlbumID=ID, AlbumName=[Name] from Album 
 where exists(  
 select 1 from Artist_Album join Album_Song on Artist_Album.AlbumID=Album_Song.AlbumID 
 	join Song_URL on Album_Song.SongID=Song_URL.SongID 
 where Artist_Album.ArtistID=@ArtistID and Artist_Album.AlbumID=Album.ID 
 )
------解决方案--------------------
select 
     B.* 
 from 
     Album  B, 
     Artist_Album D, 
     Album_Song E 
 where