首頁 > 軟體

mysql模糊匹配多個值的兩種方法範例

2022-12-17 14:01:23

要求:實現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模糊匹配多個值內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com