SQL查询 - 从字符串中获取id的正确方法?

时间:2011-05-07 15:27:13

标签: sql

我有一个客户表,其中有一个字段“类别”。它是一个包含ID的字符串,除以逗号1,11,14,21

假设我想查询所有具有categoryID 1的客户 - 查询它的正确方法是什么?

问题是ID 1可能位于字符串的开头,中间或末尾,或者甚至是唯一的ID,因此我必须涵盖所有情况,例如:

WHERE categories LIKE '1' 
   OR categories LIKE '1%,' 
   OR categories LIKE '%,1,%' 
   OR categories like '%,1'

有更优雅(可能更快)的方法吗?

2 个答案:

答案 0 :(得分:3)

您应该拥有一个CustomerCategories表,其中包含CustomerID,CategoryID列,然后每个客户类别都有一个条目。这 far 更容易查询 - 并且非常高度是关系数据库的标准。

在字符串中存储ID数组是非关系型的,因为您发现这是一个要查询的噩梦。

答案 1 :(得分:2)

你应该扼杀设计数据库的人这样工作。我永远不会想到你应该在一个字段中分隔数据的实例。

就此而言,我认为这对您来说是一个合适的解决方法。

WHERE ','+[categories]+',' LIKE '%,1,%'