我应该使用什么SQL操作?

时间:2011-01-21 01:46:27

标签: sql database-design join

我有两张桌子:

TABLE 'songs'
song_id   --some other columns about this song
-------
1
2
3

TABLE 'song_ownership'
user_id      song_id
-------      -------
28           1
28           3
538          1
234          2

我有兴趣执行查询,其中给定user_id我已经返回了他们拥有的所有歌曲。例如,您可以看到用户28拥有两首歌曲。

顺便说一句,这是我知道如何规范化这个表的最佳方法,并且对于如何更传统地存储这些数据的建议持开放态度(我只是在学习SQL)。这是典型的表格设置吗?

2 个答案:

答案 0 :(得分:3)

select songs.*
from songs
inner join song_ownership on song_ownership.song_id = songs.song_id and     
song_ownership.user_id=@user_id

假设同一个用户不能拥有两次相同的歌曲。到目前为止,你的标准化看起来很好您的song_ownership表将是“多对多”表,并且(如果歌曲用户关联是唯一的),您可以在两列上放置复合主键,并且您的用户将位于单独的表中。

答案 1 :(得分:1)

select * -- choose only the columns you're interested to, like user id and song name
from songs
     inner join song_ownership on song_ownership.song_id=songs.song_id
where song_ownership.user_id=?