【发布时间】:2018-08-06 17:02:05
【问题描述】:
我正在处理几个不同的表格,这些表格包含来自用户对电影评分的数据。我的电影表当前列出了 MovieId、MovieTitle 和 Category。每个类别列中的数据在每一行中都有重复的组,我想通过将它们移到由 MovieId、CategoryId 组成的 MovieCategories 来消除它们。
我的类别栏使用 |作为分隔符,例如“Action | Thriller | Drama”。我有一个单独的表 CategoryDescription ,它为每个类型分配一个 CategoryId,例如,我希望我的最终 MovieCategories 表如下所示:
MovieId | CategoryId
------------------------
1 1
1 4
1 7
等每部电影及其各自的流派。非常感谢任何帮助!
编辑:好的,我想要的结果是我上面的表格,列出了每部电影和每个单独的流派。例如,假设在我的电影表中我有:
MovieId | MovieTitle | Category
1 Toy Story Animated | Childrens
2 Die Hard Action | Thriller
我希望我的 MovieCategories 表具有我的 Categories 表(列出 CategoryId 1-20 和每个相应的流派)中的 MovieId 和相应的 CategoryId,所以我在包含上述数据的最终表中的结果将是
MovieId | CategoryId
1 1
1 4
2 3
2 5
希望这是有道理的!
再修改:
感谢到目前为止的 cmets 伙计们。我能够得到一个查询来产生几乎我想要的结果,但是我现在如何更新我的 MovieCategories 表?这是有效的查询:
select distinct
DUMMYMOVIES.MovieId,
trim(regexp_substr(DUMMYMOVIES.CatDescription, '[^|]+', 1,
levels.column_value)) as Category
from
DUMMYMOVIES,
table(cast(multiset(select level from dual connect by level <=
length (regexp_replace(DUMMYMOVIES.CatDescription, '[^|]+')) + 1) as
sys.OdciNumberList)) levels
order by MovieId;
这会正确拆分 Category 列,但是如何将其转移到我的 MovieCategories 表中?我可以使用 UPDATE 语句并让它运行此查询,对照我的 CategoryDescription 表检查类别名称吗?
【问题讨论】:
-
您使用的是什么 SQL?如果您使用的是 2016,则有一个内置的拆分功能。
-
哦抱歉 - 应该指定。我正在使用 oracle SQL 开发人员。
-
样本数据和期望的结果真的很有帮助。
-
我用一些额外的信息编辑了我的帖子。
-
它有点失控 - 我们正在偏离原始问题,并扩展它(不好的做法)。我建议一个问题 - 一个问题(如果需要)。不要在同一篇文章中堆叠更多问题。
标签: sql oracle oracle-sqldeveloper