一张mysql表存储了部门表的多个编码id,数据类型是字符串使用逗号隔开,现根据部门名称模糊查询这张表,sql如何写
时间: 2024-09-24 19:05:19 浏览: 32
在MySQL中,如果你有一个包含部门ID列表的字段,且每个ID用逗号分隔,为了根据部门名称进行模糊查询,你可以先将这个逗号分隔的字符串分解成数组(如果数据库支持JSON),然后通过IN操作符或者子查询进行匹配。假设你的表名为`department_table`,字段名是`department_ids`,并且有个`department_name`字段,可以尝试这样的SQL:
```sql
SELECT * FROM department_table
WHERE FIND_IN_SET(department_name, REPLACE(department_ids, ',', '\',\'')) OR
(SUBSTRING_INDEX(SUBSTRING_INDEX(department_ids, ',', numbers.n), ',', -1) LIKE '%'+CONCAT('%', department_name, '%') +'%'
FOR numbers IN (1,2,3,...)); -- 如果部门ID很多,需要遍历所有可能的位置
```
在这个例子中,我们使用`FIND_IN_SET`函数检查部门名称是否在ID列表中,`REPLACE`函数用于替换逗号为`\`,\'`便于在`LIKE`操作中处理,`SUBSTRING_INDEX`用于逐个提取ID并进行模糊搜索。
注意这只是一个基本的示例,实际应用中可能需要根据你的数据库版本、性能需求以及部门ID的数量来调整。另外,这种方法可能会有性能问题,特别是当部门ID非常多的时候。
阅读全文