- 爱易网页
-
MSSQL教程
- 头晕,跨5个表的查询!求救!该如何解决
日期:2014-05-18 浏览次数:20627 次
头晕,跨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