如何查询数据库表中逗号分隔的allot字段含特定整数值的id?
嘿,这个场景我碰到过好多次!要从逗号分隔的allot字段里精准找出包含特定整数值的记录,直接用LIKE很容易踩坑(比如会误匹配到226、261这类带26但不是独立值的情况),给你两个靠谱的解决办法:
方案1:用MySQL专属函数
FIND_IN_SET() 这是处理逗号分隔列表最省心的方案,MySQL专门提供了这个函数来做这件事,能精准匹配独立的数值,不会出现部分匹配的问题。
示例SQL(把your_table_name换成你的实际表名):
SELECT id FROM your_table_name WHERE FIND_IN_SET('26', allot) > 0;
简单解释下:FIND_IN_SET()会返回目标值在逗号列表中的位置,只要返回结果大于0,就说明这个值存在于allot字段里,这样就能精准拿到你要的id=72这条数据啦。
方案2:通用SQL写法(适配多数数据库)
如果你的数据库不是MySQL(比如PostgreSQL、SQL Server这类),不支持FIND_IN_SET,可以用拼接前后逗号的方式来规避部分匹配的问题:
示例SQL:
SELECT id FROM your_table_name WHERE CONCAT(',', allot, ',') LIKE '%,26,%';
原理很简单:给allot字段的前后都加上逗号,这样不管目标值26在列表的开头、中间还是结尾,都会变成,26,的格式,再用LIKE匹配就不会误判啦。
额外提醒
说句题外话:尽量别在数据库里存逗号分隔的列表,这种设计不符合数据库的范式要求,后期查询、修改、扩展都会很麻烦。如果业务允许的话,建议把allot拆成单独的关联表,用多对多的关系来存储,这样查询效率和可维护性都会提升很多。
内容的提问来源于stack exchange,提问作者Manoj kumar
相关产品推荐
相关产品推荐

