MySQL单表多字段模糊查询解决方法
背景:在项目中经常遇到查询接口需要实现单表中对多字段进行多个关键字的模糊查询,但这个关键字并不一定只存在于某个字段。
-
例如现有一张employees表,其中有last_name,first_name两个字段,分别记录一条用户的姓和名。根据用户输入的查询请求,在这两个字段中查询员工姓名的第三个字母是
a
的员工信息。 -
目前遇到的问题是,
a
是可能存在于两个字段中的任意一个或者多个,但又要求两个字段必须包含所有的关键词a
。如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此想到方法:把两个字段合并在一块,再进行模糊查找# 在查询记录的同时,将需要进行多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询。 SELECT * FROM employees WHERE CONCAT(last_name,first_name) LIKE '__a%'; /* 注意: CONCAT(str1, str2, ...) 返回值:由全体输入参数合并在一起而得到的字符串。只要输入的参数中有NULL值,就返回NULL。CONCAT允许只有一个输入参数的情况。 */
- 但,如果用户的查询请求更改为,在这两个字段中查询员工姓名的第三个字母是
a
的员工姓名。SQL语句将改为如下吗?SELECT CONCAT(last_name,first_name) AS "员工姓名" FROM employees WHERE CONCAT(last_name,first_name) LIKE '__a%'; /* 逻辑上是不是没有什么错误?为了满足查询的显示结果是员工姓名。 我们将last_name和first_name进行了合并,形成新的字段并起了别名为员工姓名。 那试试看能否正常运行吧?十分欢迎把你的运行结果公布在评论区里。 如果不能运行,请思考报错原因后进行修改,并把你的更改思路在评论区里发表出来~ */