SQL查询困难JOIN

时间:2013-10-20 23:55:00

标签: sql

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

表格如下:

曲目

TitleID TrackNum TrackTitle

标题

TitleID ArtistID 标题 StudioID 流派

艺术家

ArtistID ARTISTNAME 市 区域 国家

成员

MEMBERID 名字 姓 地址 市 区域 国家 SalesID

销售人员

SalesID 名字 姓 声母 监

Bryce Sanders是会员表的一部分。 SalesID是该表的foriegn键。也许我可以在聪明的联接中使用SalesID来查找他录制的TrackTitles。

同样问题是:我需要列出名为Bryce Sanders的成员所播放的所有曲目。数据库是Lyric。

我的尝试是:

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

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

4 个答案:

答案 0 :(得分: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';

你必须有一些方式加入MEMBER和ARTIST,我在你的问题中没有看到它。 我写了一个例子,在成员中添加一个artistID,使其成为“艺术家”的一部分

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

是的,我会添加曲目和销售之间的关系。

SalesItself

MemberID TrackID。

答案 3 :(得分:0)

我根据您的描述看待它的方式是MembersTracks具有many-to-many类型的关系。如果是这种情况,那么最好制作一个能产生两对一关系的中间表。在这种情况下,您可以将其命名为MembersTracks表。这意味着Member会在MembersTracks表格中关联多个曲目,而Track会有很多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'