如何在不使用冗余 LIKE 语句的情况下查询逗号分隔列的特定值
数据库表通常包含存储逗号分隔列值列表。要检索包含特定值的行,可以使用 LIKE 语句。但是,使用多个 LIKE 语句可能会很麻烦且效率低下。
使用 LIKE 语句的缺点
在提供的示例中,表将类别存储为逗号分隔值:
ID | CATEGORIES --------------- 1 | c1 2 | c2,c3 3 | c3,c2 4 | c3 5 | c4,c8,c5,c100
要查找包含“c2”的行,可以使用:
SELECT id FROM table WHERE categories LIKE '%c2%';
但是,这也会匹配字符串中任何位置包含“c2”的行,从而导致误报。使用多个 LIKE 语句来检查特定组合可能很乏味且容易出错。
替代方法:逗号分隔搜索
更有效的方法是使用逗号分隔搜索:
select * from YourTable where ',' || CommaSeparatedValueColumn || ',' LIKE '%,SearchValue,%'
此查询搜索用逗号包围的完整值,确保精确匹配。但是,它有局限性,因为它假设值中没有空格或逗号。
最佳解决方案:单独的类别表
为了避免这些限制并提高性能,它是强烈建议创建一个单独的类别表,以多对多关系链接到主表。这可以实现高效的查询和数据操作,而无需繁琐的字符串操作或错误匹配的风险。
以上是如何高效地查询逗号分隔列的特定值?的详细内容。更多信息请关注PHP中文网其他相关文章!