-1

我正在使用歌词数据库。我需要列出名为 Bryce Sanders 的成员播放的所有曲目。

表格如下:

曲目

TitleID TrackNum TrackTitle

标题

TitleID ArtistID 标题 StudioID 流派

艺术家

艺术家ID 艺术家姓名 城市 地区 国家

成员

MemberID FirstName LastName Address City Region Country SalesID

销售人员

SalesID 名字 姓氏 缩写 主管

布莱斯桑德斯是成员表的一部分。SalesID 是该表的外键。或许我可以在 smart join 中使用 SalesID 来查找他记录的 TrackTitles。

问题又是:我需要列出一个名为 Bryce Sanders 的成员播放的所有曲目。数据库是抒情的。

我的尝试是:

SELECT Members.Lastname, Members.FirstName, Tracks.TrackTitle 
FROM Members, Tracks 
WHERE Members.lastname = "Sanders";

但我认为这并不能完全解决它。

4

4 回答 4

2

你会做这样的事情:

SELECT tr.*
FROM tracks tr
INNER JOIN titles ti ON tr.titleID = ti.titleID
INNER JOIN artists ar ON tr.artistID = ti.artistID
INNER JOIN Members me ON me.artistID =  ar.artistID -- THIS IS MISSING. 
WHERE me.lastname = 'Sanders' AND me.firstname = 'Bryce';

你必须有某种方式加入会员和艺术家,我在你的问题中看不到它。我作为示例编写了在成员中添加艺术家 ID 以使其成为“艺术家”的一部分

于 2013-10-21T00:02:28.410 回答
0

是的,我会添加轨道和销售之间的关系。

销售本身

成员 ID 跟踪 ID。

于 2013-10-21T00:28:57.330 回答
0

根据您的描述,我看待它的方式是,Members并且Tracks具有某种many-to-many关系。如果是这种情况,那么最好制作一个中间表,以建立两个一对多的关系。在这种情况下,您可能会将其命名为MembersTrackstable。这意味着 aMember将在MembersTracks表中关联许多 Track,并且 aTrack将有许多Members关联。

您的表格可能的字段/列MembersTracks将是:

MembersTracksID (PK), MembersID (FK), TrackNum (FK), SubscriptionDate

使用新添加的中间表,您可能可以进行如下查询:

SELECT M.Lastname, M.Firstname, T.TrackTitle
FROM MembersTracks MT
INNER JOIN Members M
ON MT.MembersID = M.MembersID
INNER JOIN Tracks T
ON MT.TrackNum = T.TrackNum
INNER JOIN Titles
ON T.TitleID = Titles.TitleID
WHERE M.Lastname = 'Sanders' AND M.Firstname = 'Bryce'
于 2013-10-21T00:35:15.050 回答
0

您需要一个交易或销售表,其中包含每个成员购买的曲目列表。此表还可以包含销售人员的 if。

成员表上不需要销售人员。如果销售人员也是成员,那么外键应该是相反的,否则这两个表之间应该没有直接关系。

于 2013-10-21T00:11:13.403 回答