SQL:如何分隔用逗号分隔的字符串值?

时间:2015-01-12 00:07:00

标签: sql ms-access csv imdb

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

我使用IMDb对我看过的电影进行评级,并使用网站的导出功能将数据转换为.csv文件,我上传到Microsoft Access。然而,“类型”专栏是一个多对多的关系,我希望转变为一对多的关系。

我希望有一个名为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")

这是我数据库当前状态图像的链接。非常感谢你的帮助。这是我正在做的一个项目,可以在我自己的时间里学习更多。

2 个答案:

答案 0 :(得分:1)

基本上,当你有一对多的关系时,你应该使用一个表来表示这种关系 在你的情况下,我建议有3个表:

  1. 电影表:包含当前表格以外的信息,除了Genres
  2. 类型表:包含(至少)Id和名称
  3. Film_Genre表:包含Film_Id,Gen​​reId。
  4. 例如

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

    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”列作为电影表的Id,如果没有,你应该拥有自己的Id)

    当然,您需要花费很少的精力将当前数据库转换为此数据库。

答案 1 :(得分:0)

关于解决方案的一些注意事项。

流派表

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 & "*"