C# 如何根据两个逗号分隔值列中的任意一个值获取记录

C# 如何根据两个逗号分隔值列中的任意一个值获取记录,c#,sql,asp.net,C#,Sql,Asp.net,可能问题的标题没有正确定义我真正想问的问题。下面是对我的问题的更具体的描述 我的数据库中有一个下表User,其中有一列,即Category,包含多个值,但用逗号分隔 S.no. Name Category 1 Ankit Ex Soldier, Senior Citizen 2 Ritu Widow, Senior Citizen 3 Akash Ex soldier 我想在分类的基础上搜索记录

可能问题的标题没有正确定义我真正想问的问题。下面是对我的问题的更具体的描述

我的数据库中有一个下表
User
,其中有一列,即
Category
,包含多个值,但用逗号分隔

S.no.     Name         Category

 1       Ankit     Ex Soldier, Senior Citizen

 2       Ritu      Widow, Senior Citizen

 3       Akash     Ex soldier
我想在分类的基础上搜索记录

如果我搜索的话

select * from User where Category='Senior Citizen'
然后它必须显示安基特和日图的记录。 如何做到这一点。 plz帮助

试试这个:

select * from User where Category like '%Senior Citizen%'
试试这个:

select * from User where Category like '%Senior Citizen%'
试试这个:

select * from User where Category like '%Senior Citizen%'
试试这个:

select * from User where Category like '%Senior Citizen%'
您需要操作员:-

select * from User where Category LIKE '%Senior Citizen%'
您需要操作员:-

select * from User where Category LIKE '%Senior Citizen%'
您需要操作员:-

select * from User where Category LIKE '%Senior Citizen%'
您需要操作员:-

select * from User where Category LIKE '%Senior Citizen%'
但您应该为类别使用单独的表

但您应该为类别使用单独的表

但您应该为类别使用单独的表


但是你应该使用一个单独的表来分类。

就像Kiss László写的那样,你应该在两个表中分开信息。这方面的专业术语称为“规范化”。最重要的是要知道1NF、2NF和3NF(详细信息请阅读)

因此,它应该如下所示:

Table Persons
PersonId    Name
1           Ankit
2           Ritu
3           Akash

Table Categories
CategoryId    Name
1             Ex. Soldier
2             Senior Citizen
3             Widow

Table PersonCategories
PersonId    CategoryId
1           1
1           2
2           2
2           3
3           3
为什么要这样做?

在我看来,最大的原因是表现。我用您当前的方法制作了一些测试表,其中包含20k条目的数据集。查询的执行大约需要200毫秒才能返回。使用上面的模式,在大约1毫秒内执行以下查询

SELECT
  *
FROM
  Persons AS p
JOIN
  PersonCategories AS pc ON p.PersonId = pc.PersonId
JOIN
  Categories AS c on pc.CategoryId = c.CategoryId
WHERE
  c.Name = 'Senior Citizen'
为什么这个查询速度要快得多?

因为我们可以很容易地在我们的专栏上使用。在上面的模式中,Persons.PersonId和Categories.CategoryId是其表的主键列。因此,将它们用作联接操作的列具有最小的成本。PersonCategories表的两列都是外键(确保有效的数据库状态并提高性能)。最后,Categories.Name列也有一个索引

这种方法可能不好吗?


在大多数情况下,这是一条路要走。不这样做的一个原因是,如果您必须处理大量插入。此模式中的插入成本要高得多,因为所有索引都需要在插入后更新

就像基斯·拉斯洛(Kiss László)写的那样,你应该将信息分为两个表。这方面的专业术语称为“规范化”。最重要的是要知道1NF、2NF和3NF(详细信息请阅读)

因此,它应该如下所示:

Table Persons
PersonId    Name
1           Ankit
2           Ritu
3           Akash

Table Categories
CategoryId    Name
1             Ex. Soldier
2             Senior Citizen
3             Widow

Table PersonCategories
PersonId    CategoryId
1           1
1           2
2           2
2           3
3           3
为什么要这样做?

在我看来,最大的原因是表现。我用您当前的方法制作了一些测试表,其中包含20k条目的数据集。查询的执行大约需要200毫秒才能返回。使用上面的模式,在大约1毫秒内执行以下查询

SELECT
  *
FROM
  Persons AS p
JOIN
  PersonCategories AS pc ON p.PersonId = pc.PersonId
JOIN
  Categories AS c on pc.CategoryId = c.CategoryId
WHERE
  c.Name = 'Senior Citizen'
为什么这个查询速度要快得多?

因为我们可以很容易地在我们的专栏上使用。在上面的模式中,Persons.PersonId和Categories.CategoryId是其表的主键列。因此,将它们用作联接操作的列具有最小的成本。PersonCategories表的两列都是外键(确保有效的数据库状态并提高性能)。最后,Categories.Name列也有一个索引

这种方法可能不好吗?


在大多数情况下,这是一条路要走。不这样做的一个原因是,如果您必须处理大量插入。此模式中的插入成本要高得多,因为所有索引都需要在插入后更新

就像基斯·拉斯洛(Kiss László)写的那样,你应该将信息分为两个表。这方面的专业术语称为“规范化”。最重要的是要知道1NF、2NF和3NF(详细信息请阅读)

因此,它应该如下所示:

Table Persons
PersonId    Name
1           Ankit
2           Ritu
3           Akash

Table Categories
CategoryId    Name
1             Ex. Soldier
2             Senior Citizen
3             Widow

Table PersonCategories
PersonId    CategoryId
1           1
1           2
2           2
2           3
3           3
为什么要这样做?

在我看来,最大的原因是表现。我用您当前的方法制作了一些测试表,其中包含20k条目的数据集。查询的执行大约需要200毫秒才能返回。使用上面的模式,在大约1毫秒内执行以下查询

SELECT
  *
FROM
  Persons AS p
JOIN
  PersonCategories AS pc ON p.PersonId = pc.PersonId
JOIN
  Categories AS c on pc.CategoryId = c.CategoryId
WHERE
  c.Name = 'Senior Citizen'
为什么这个查询速度要快得多?

因为我们可以很容易地在我们的专栏上使用。在上面的模式中,Persons.PersonId和Categories.CategoryId是其表的主键列。因此,将它们用作联接操作的列具有最小的成本。PersonCategories表的两列都是外键(确保有效的数据库状态并提高性能)。最后,Categories.Name列也有一个索引

这种方法可能不好吗?


在大多数情况下,这是一条路要走。不这样做的一个原因是,如果您必须处理大量插入。此模式中的插入成本要高得多,因为所有索引都需要在插入后更新

就像基斯·拉斯洛(Kiss László)写的那样,你应该将信息分为两个表。这方面的专业术语称为“规范化”。最重要的是要知道1NF、2NF和3NF(详细信息请阅读)

因此,它应该如下所示:

Table Persons
PersonId    Name
1           Ankit
2           Ritu
3           Akash

Table Categories
CategoryId    Name
1             Ex. Soldier
2             Senior Citizen
3             Widow

Table PersonCategories
PersonId    CategoryId
1           1
1           2
2           2
2           3
3           3
为什么要这样做?

在我看来,最大的原因是表现。我用您当前的方法制作了一些测试表,其中包含20k条目的数据集。查询的执行大约需要200毫秒才能返回。使用上面的模式,在大约1毫秒内执行以下查询

SELECT
  *
FROM
  Persons AS p
JOIN
  PersonCategories AS pc ON p.PersonId = pc.PersonId
JOIN
  Categories AS c on pc.CategoryId = c.CategoryId
WHERE
  c.Name = 'Senior Citizen'
为什么这个查询速度要快得多?

因为我们可以很容易地在我们的专栏上使用。在上面的模式中,Persons.PersonId和Categories.CategoryId是其表的主键列。因此,将它们用作联接操作的列具有最小的成本。PersonCategories表的两列都是外键(确保有效的数据库状态并提高性能)。最后,Categories.Name列也有一个索引

这种方法可能不好吗?