考虑这两个表:
- 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
如何做到这一点?
答案 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”值的那一行。我会让别人回答这个问题;我的主要观点是,如果没有规范化的表结构,你将无法完成任何工作。