首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL:多到多分辨率和交叉实体

SQL:多到多分辨率和交叉实体
EN

Stack Overflow用户
提问于 2014-12-23 18:38:04
回答 3查看 1.5K关注 0票数 1

对于多到多的关系,相交表被用来解决这两个一对多的关系。我的问题是,我现在有两个表,“播放列表”和“歌曲”。每首歌都出现在许多播放列表中,每一首播放列表都可以包含许多歌曲。为了解决这个问题,添加了第三个表,“歌曲日志”来解决多到多的问题。

但是,当涉及到向数据库中添加值时,我有点困惑。例如,如何使用相交表将一些(例如4)歌曲添加到播放列表表中?另外,我如何添加哪些歌曲在哪一个播放列表的细节?我是不是搞错了,这对很多人来说是真的吗?还是我完全搞错了?

我很困惑,所以一个清晰和基本的解释这方面的设计可能会有帮助!非常感谢。

EN

Stack Overflow用户

回答已采纳

发布于 2014-12-23 19:06:22

让我们把这个问题分解一下。

你有歌。

代码语言:javascript
运行
复制
CREATE TABLE Songs
(
  SongID int,
  SongName varchar(50)
);

你有播放列表的信息。(播放列表的名字,是谁创建的,随便吧)。

代码语言:javascript
运行
复制
CREATE TABLE PlaylistDef
(
  PlaylistID int,
  PlaylistName varchar(50)  
);

你的歌都在播放列表里。歌曲可以在多个播放列表中。

代码语言:javascript
运行
复制
CREATE TABLE Playlist
(
  PlaylistID int,
  SongID int
);

让我们填充表:

代码语言:javascript
运行
复制
INSERT INTO Songs
(SongID, SongName)
VALUES
(1, 'A'),
(2, 'B'),
(3, 'C'),
(4, 'D'),
(5, 'E');

INSERT INTO PlaylistDef
(PlaylistID, PlaylistName)
VALUES
(1, 'a'),
(2, 'b');


INSERT INTO Playlist
(PlaylistID, SongID)
VALUES
(1, 1),
(1, 2),
(1, 3),
(1, 4),
(2, 2),
(2, 3),
(2, 4),
(2, 5);

然后,您现在可以运行类似的东西来查看特定的播放列表。

代码语言:javascript
运行
复制
SELECT * FROM Playlist WITH (NOLOCK) WHERE PlaylistID = 2

它会把这个还回去

代码语言:javascript
运行
复制
PLAYLISTID  SONGID
2           2
2           3
2           4
2           5

这个有用吗?

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27626160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档