我有一个表格,其中包含一些用逗号分隔的数字。我需要选择包含特定值的*行。我使用的是SQL Server和C#,因此可以使用SQL或LINQ。
我的频道列(varchar)中的数据如下所示:1,5,8,22,27,33
我的媒体表如下所示:
MediaID MediaName MediaDate ChannelIDs
------- --------- --------- ----------
1 | The Cow Jumped Over The Moon | 01/18/2015 | 1,5,8,22,27,33
2 | The Cat In The Hat | 01/18/2015 | 2,4,9,25,28,31
3 | Robin Hood The Thief | 01/18/2015 | 3,5,6,9,22,33
4 | Jingle Bells Batman Smells | 01/18/2015 | 6,7,9,24,25,32
5 | Up The River Down The River | 01/18/2015 | 5,6,10,25,26,33
等...
我的频道表如下所示:
ChannelID ChannelName
--------- -----------
1 Animals
2 Television
3 Movies
4 Nursery Rhymes
5 Holidays
等...
每一行媒体都可以包含多个频道。
我应该像这样使用包含搜索吗?
SELECT * FROM Media WHERE CONTAINS (Channels,'22')
这需要我对该列进行全文索引,但我真的不想在我的全文索引中包含此列。
有更好的方法吗?
由于
答案 0 :(得分:6)
您应该修复数据格式,这样就不会将数字存储为逗号分隔的字符串。 SQL为列表提供了很好的数据结构,它被称为表而不是字符串。特别是,您需要一个联结表,每个“媒体”实体和id。
一行尽管如此,有时您会遇到特定的数据结构。如果是这样,您可以使用:
where ','+channels+',' like '%,22,%'
注意:这不能利用常规索引,因此性能不会很好。如果您有一个大表并且需要更好的性能,请修复数据结构。