我有一个客户表,其中有一个字段“类别”。它是一个包含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'
有更优雅(可能更快)的方法吗?
答案 0 :(得分:3)
您应该拥有一个CustomerCategories表,其中包含CustomerID,CategoryID列,然后每个客户类别都有一个条目。这 far 更容易查询 - 并且非常高度是关系数据库的标准。
在字符串中存储ID数组是非关系型的,因为您发现这是一个要查询的噩梦。
答案 1 :(得分:2)
你应该扼杀设计数据库的人这样工作。我永远不会想到你应该在一个字段中分隔数据的实例。
就此而言,我认为这对您来说是一个合适的解决方法。
WHERE ','+[categories]+',' LIKE '%,1,%'