mysql模糊匹配多个值的两种方法实例

目录
  • 要求:实现mysql中对同个字段进行多个匹配值的模糊查询
  • 方法一:将like作为连接条件
  • 方法二:正则表达式搭配group_concat函数
  • 总结

要求:实现mysql中对同个字段进行多个匹配值的模糊查询

先看数据表:

目标是在user表中,匹配出姓氏在family_info表中的记录。

方法一:将like作为连接条件

将查询表与需要匹配的多个值(可以是表或select子句结果)进行左连接,以字段使用like模糊匹配作为连接条件,再对连接结果进行非空过滤。

先看like模糊匹配作为连接条件的结果:

select u.*,fi.* from `user` u left join family_info fi
on u.name like concat(fi.family_name, '%')

能看到,没有对应匹配值的数据在查询中,family_name字段结果是null,此时再把语句进行调整,将匹配后family_name为null值的数据进行过滤,得到所需要的查询语句:

select u.* from `user` u left join family_info fi
on u.name like concat(fi.family_name, '%')
where fi.family_name is not null

能得到姓名为“张”、“王”开头的记录。

方法二:正则表达式搭配group_concat函数

使用group_concat函数来生成任意字符串左匹配的正则表达式字符串:

select group_concat(concat('^',fi.family_name) SEPARATOR '|')  from family_info fi

使用regexp操作符来使用正则表达式:

select * from user u where u.name regexp
( select group_concat(concat('^',fi.family_name) SEPARATOR '|')  from family_info fi )

结果是查询出了姓名为“张”、“王”开头的记录。

示例表的表语句:

CREATE TABLE `user` (
  `name` varchar(32) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表'

INSERT INTO `user` (name,age) VALUES
	 ('张三',21),
	 ('李四',22),
	 ('王五',23),
	 ('张六',24),
	 ('李七',25),
	 ('王八',26);

CREATE TABLE `family_info` (
  `family_name` varchar(32) DEFAULT NULL COMMENT '姓氏'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='姓氏表'

INSERT INTO family_info (family_name) VALUES
	 ('张'),
	 ('王');

总结

到此这篇关于mysql模糊匹配多个值的文章就介绍到这了,更多相关mysql模糊匹配多个值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL全文索引like模糊匹配查询慢解决方法

    目录 需求 全文索引介绍 全文索引使用 中文分词与全文索引 什么是N-gram? 这个上面这个N是怎么去配置的? 修改方式 实际使用 初始化测试数据 添加索引 查询 1.使用自然语言模式 NATURAL LANGUAGE MODE 查询 2.使用布尔模式(BOOLEAN MODE)查询 实际使用 注意点 需求 需要模糊匹配查询一个单词 select * from t_phrase where LOCATE('昌',phrase) = 0; select * from t_chinese_phra

  • Python生成MD5值的两种方法实例分析

    本文实例讲述了Python生成MD5值的两种方法.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- import datetime # NO.1 使用MD5 import md5 src = 'this is a md5 test.' m1 = md5.new() m1.update(src) print m1.hexdigest() 运行结果: 174b086fc6358db6154bd951a8947837 # -*- coding:utf-8 -*- # NO

  • 解决mysql模糊查询索引失效问题的几种方法

    我们在使用like %通配符时常常会引起索引失效的问题. 这里,我们讨论一下like使用%的几种情况: 下列例子用到的索引(VC_STUDENT_NAME) 一.like 'xx%' EXPLAIN select * from t_student where VC_STUDENT_NAME like '王%' 我们发现使用%不放在开头的时候,索引是有效的 二.like '%xx' EXPLAIN select * from t_student where VC_STUDENT_NAME like

  • Js得到radiobuttonlist选中值的两种方法(推荐)

    如下所示: <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="ajaxselect.OnmouseTitle.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

  • python 字典中取值的两种方法小结

    如下所示: a={'name':'tony','sex':'male'} 获得name的值的方式有两种 print a['name'],type(a['name']) print a.get('name'),type(a.get('name')) 发现这两个结果完全一致,并没有任何的差异. 怎么选择这两个不同的字典取值方式呢? 如果字典已知,我们可以任选一个,而当我们不确定字典中是否存在某个键时,我之前的做法如下 if 'age' in a.keys(): print a['age'] 因为不先

  • IOS自带Email的两种方法实例详解

    IOS自带Email的两种方法实例详解 IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController.借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能. 1.openURL 使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段.我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时退出.下面是使用openURL来发邮件的一个小例子: #pr

  • Android判断后台服务是否开启的两种方法实例详解

    Android判断后台服务是否开启的两种方法实例详解 最近项目用到后台上传,就开启了一个服务service. 但是刚开始用这种方法,有些机型不支持:酷派不支持.然后又换了第二种判断方法. // public boolean isServiceWork(Context mContext, String serviceName) { // boolean isWork = false; // ActivityManager myAM = (ActivityManager) mContext // .

  • Android 中Popwindow弹出菜单的两种方法实例

    Android 中Popwindow弹出菜单的两种方法实例 1.popWindow就是对话框的一种方式! 此文讲解的android中对话框的一种使用方式,它叫popWindow. 2.popWindow的特性 Android的对话框有两种:PopupWindow和AlertDialog.它们的不同点在于: AlertDialog的位置固定,而PopupWindow的位置可以随意. AlertDialog是非阻塞线程的,而PopupWindow是阻塞线程的. PopupWindow的位置按照有无偏

  • springboot单元测试两种方法实例详解

    这篇文章主要介绍了springboot单元测试两种方法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 springboot的单元测试,这里介绍两种方式,一种是在测试类中添加注解:另一种是在代码中启动项目的main方法中继承接口(也可以写在其他方法中). 如 对查看数据库的连接池信息 进行单元测试 1. 在类上使用注解: @RunWith(SpringRunner.class) @SpringBootTest @RunWith(Sprin

  • 使用Python获取字典键对应值的两种方法

    目录 当知道字典的键时: 当不知道字典的键时: 附:字典dic最大值对应的键 总结 有两种方法 当知道字典的键时: unit_rooms={ 3:{301:[1,80],302:[1,80],303:[2,90],304:[2,90]}, 4:{401:[1,80],402:[1,80],403:[2,90],404:[2,90]}, 5:{501:[1,80],502:[1,80],503:[2,90],504:[2,90]} } for i in range(3,6): rooms=unit

  • 使用java获取md5值的两种方法

    Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,是一种比较常用的哈希算法. java中可以用两种方法实现,我们先说麻烦一点的,代码: 复制代码 代码如下: public class md5_test { //MD5的字符串常量 private final static String[] hexDigits = { "0", "1", "2", "3"

随机推荐