2013-12-08 79 views
1

enter image description hereSql数据库查询/结构

在上图/下面的情况。 我希望能够查询上一首歌曲,哪些歌曲音乐家是什么音乐家......

  1. 这是造成这种情况的正确模式?
  2. 我只是查询“SongMusicians”表吗?

这是大学的任务,我在理论上遇到了麻烦。

我最初的想法是只在音乐家桌上有歌曲,反之亦然。但有人告诉我需要一个“中介”表。

任何帮助将是惊人的

感谢

回答

2

这看起来OK了这种性质的问题。两个主表之间的链接表,让音乐家有多首歌曲,一首歌曲有多个音乐家。如果您没有它,并且您在表格音乐家中添加了一首歌曲(如果您将musicianid放入歌曲中,则同样适用),则每次参加歌曲时都必须复制音乐家的所有信息。这不好。

要获取有关乐曲中歌曲或其他内容的信息,请通过链接表加入表以找到所需的信息。

要得到所有有关的歌曲音乐家是你做的信息:

SELECT s.* 
FROM songs s 
INNER JOIN songmusicians sm ON sm.songid= s.songid 
INNER JOIN musicians m ON sm.musicianid= m.musicianid 
WHERE m.FirstName = 'Kurt' AND m.LastName = 'Kobain'; 

要获得所有参加你做一首歌曲的音乐家:

SELECT m.* 
FROM songs s 
INNER JOIN songmusicians sm ON sm.songid= s.songid 
INNER JOIN musicians m ON sm.musicianid= m.musicianid 
WHERE s.songTitle = 'Smells like teen spirit'; 
+0

非常感谢您! 只是澄清..所以当我有这个结构,我查询两个表(音乐家和歌曲)不是中间表,其中包含列表? 还没有看过Innerjoin幻灯片:/ 对不起,我想我现在得到它。你已经使用了内部连接,这样你就可以按名称而不是音乐家编号来搜索了吗? – user3075549

+0

是的。就是这样。我想向您展示可以让您获得音乐家或歌曲详细信息的查询。如果你只关心ID,你可以简单地查询链接表。 –

+0

没有那么完美。非常感谢你! – user3075549