FIND_IN_SET查找
在逗号分隔的字符串中检索特定值,处理简单列表查询。 · 难度:入门 · +15XP
SQL FIND_IN_SET —— 在逗号分隔列表中查找
FIND_IN_SET在逗号分隔的字符串中查找指定值,返回位置(从1开始),找不到返回0。常用于处理以逗号分隔的标签、分类等多值字段。
基本语法
-- FIND_IN_SET(要查找的值, 逗号分隔的字符串)
SELECT FIND_IN_SET('b', 'a,b,c,d'); -- 返回2
SELECT FIND_IN_SET('x', 'a,b,c,d'); -- 返回0(未找到)
实战:标签筛选
-- 文章表,tags字段存储逗号分隔的标签
SELECT * FROM articles
WHERE FIND_IN_SET('SQL', tags) > 0;
-- 找出所有标签包含SQL的文章
注意
FIND_IN_SET不使用索引,大数据量下性能差。更好的设计是用关联表存储多对多关系。
动手练习
- 基础练习:创建文章表(tags字段存逗号分隔标签),用FIND_IN_SET筛选。
- 进阶应用:用FIND_IN_SET配合ORDER BY实现按指定顺序排序。
- 项目实战:评估项目中使用FIND_IN_SET的地方,考虑是否需要重构为关联表。