【问题标题】:SQL: How to separate string values separated by commas?SQL:如何分隔用逗号分隔的字符串值?
【发布时间】:2015-03-09 17:21:21
【问题描述】:

我正在尝试为我看过的所有电影创建一个关系数据库。

我使用 IMDb 对我看过的电影进行评分,并使用该网站的导出功能来获取我上传到 Microsoft Access 的 .csv 文件中的数据。但是,“流派”列是多对多关系,我希望将其转变为一对多关系。

我想要一个名为 GENRE_ID 的表,它为每个流派分配一个数字 ID。然后我会有另一个表,其中每个实例都有movie ID(“const”)、line item numberGENRE_ID

所以它可能看起来像:

const       line_item      MOVIE_ID
tt0068646       1             1   (if MOVIE_ID: 1 = "crime")
tt0068646       2             2   (if MOVIE_ID: 2 = "drama")

这是我的数据库当前状态图像的链接。非常感谢你的帮助。这是我正在做的一个项目,目的是利用自己的时间了解更多信息。

【问题讨论】:

  • 我不太清楚你想用这个数据库做什么以及你想如何报告它。 Wraith 的回答是有道理的,直到您想要按电影标题获取报告,并在其旁边列出所有类型,然后它变成一个换位查询并变得混乱。因此,在确定存储数据的最佳方式之前,您需要弄清楚您最关心的是什么。
  • 我最终希望能够使用 Excel 的回归和相关方程来找出我观看的电影类型、我对这些电影的评分以及电影在 IMDb 上获得的评分之间的关​​系。我想我可以把“流派”从我的模型中去掉,但我有兴趣在数据库上解决这个问题。我正在寻找一个查询来编写以自动化这个过程。我同意我不想拥有与电影拥有的类型数量相同的实例数量。

标签: sql ms-access csv imdb


【解决方案1】:

基本上,当您有一对多关系时,您应该为该关系使用表 在您的情况下,我建议您使用 3 张桌子:

  1. 电影表:包含与当前表类似的信息,类型除外
  2. 类型表:包含(至少)ID 和名称
  3. Film_Genre 表:包含 Film_Id、GenreId。

例如

在您的流派表中,您的数据将是

row 1: Id =1 , Name = "Crime"   
row 2: Id = 2, Name = drama,

等等

您的 Film_Genre 表将类似于:

row1: Film_Id = tt0068646, GenreId = 1,
row2: Film_Id = tt0068646, GenreId = 2
row3: Film_Id = tt0082971, GenreId = 2

等等 (我假设你使用“const”列作为 Film 表的 Id,如果没有,你应该有自己的 Id)

当然,将您当前的数据库转换为这个数据库需要一点点努力。

【讨论】:

  • 感谢您的回复!这种结构是有道理的,但我想我的问题是如何在不手动添加这些结构的情况下做到这一点?
【解决方案2】:

关于解决方法的一些说明。

类型表

ID  Genre
1   Action
2   Adventure
3   Thriller
4   War

导入表

Const   GenreList
tt00    Action, Adventure, Thriller, War

一个查询

SELECT ti.Const, ti.GenreList, tg.Genre
FROM Imports as ti, Genres as tg
WHERE ti.GenreList Like "*" & tg.Genre & "*"

【讨论】:

  • 感谢您的回复!我会试试这个并回复你!
  • 完美!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多