从参考表中选择MasterTable中的CSV值

时间:2012-02-15 14:28:29

标签: sql csv

考虑这两个表:

- Subscriber_File ---

ID  GenreId  FileName

01      1,2       TestFile.pdf

- MasterGenre -

ID  Genrename

1      TEst1

2      Test2

当我发出此查询时,我希望将结果格式化如下

Select * From Subscriber_File
ID  GenreId        FileName           GenreName

1       1,2          TestFile.pdf           TEst1,Test2

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

您的数据未正常化。具体来说,在Subscriber_File的一行中,您在一个地方有两个事实:一个条目同时适用于MasterGenre 1和MaterGenre 2.如果它们与三个MaterGenres相关怎么办?怎么样10?要求将您的事实快速联系起来的代码升级为无法控制的混乱。

使用关系数据库系统时的标准解决方案是规范化数据,使每个“重复事实”由表中的一行表示。 (谷歌“数据库规范化”,你会发现成千上万的关于这个主题的文章。真的。)在这里,你可能最终得到:

Table Subscriber
SubscriberId
FileName

(01, TestFile.pdf)

Table Genre
GenreId
GenreName

(1, Test1)
(2, Test2)

Table SubscriberGenre
SubscriberId
GenreId

(01, 1)
(01, 2)

此时查询数据非常简单:

SELECT sub.SubscribeId, gen.GenreId, sub.FileName, gen.GenreName
 From Subscriber sub
  Inner join SubscriberGenre subgen
   On subgen.SubscriberId = sub.SubscriberId
  Inner join Gener gen
   On gen.GenreId = subgen.GenreId

这应该产生结果集

(01, 1, TestFile.pdf, Test1)
(01, 2, TestFile.pdf, Test2)

嗯,你仍然要将这两行转换为具有“1,2”值的那一行。我会让别人回答这个问题;我的主要观点是,如果没有规范化的表结构,你将无法完成任何工作。