mysql模糊匹配多個(gè)值的兩種方法實(shí)例
要求:實(shí)現(xiàn)mysql中對(duì)同個(gè)字段進(jìn)行多個(gè)匹配值的模糊查詢(xún)
先看數(shù)據(jù)表:


目標(biāo)是在user表中,匹配出姓氏在family_info表中的記錄。
方法一:將like作為連接條件
將查詢(xún)表與需要匹配的多個(gè)值(可以是表或select子句結(jié)果)進(jìn)行左連接,以字段使用like模糊匹配作為連接條件,再對(duì)連接結(jié)果進(jìn)行非空過(guò)濾。
先看like模糊匹配作為連接條件的結(jié)果:
select u.*,fi.* from `user` u left join family_info fi on u.name like concat(fi.family_name, '%')

能看到,沒(méi)有對(duì)應(yīng)匹配值的數(shù)據(jù)在查詢(xún)中,family_name字段結(jié)果是null,此時(shí)再把語(yǔ)句進(jìn)行調(diào)整,將匹配后family_name為null值的數(shù)據(jù)進(jìn)行過(guò)濾,得到所需要的查詢(xún)語(yǔ)句:
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

能得到姓名為“張”、“王”開(kāi)頭的記錄。
方法二:正則表達(dá)式搭配group_concat函數(shù)
使用group_concat函數(shù)來(lái)生成任意字符串左匹配的正則表達(dá)式字符串:
select group_concat(concat('^',fi.family_name) SEPARATOR '|') from family_info fi

使用regexp操作符來(lái)使用正則表達(dá)式:
select * from user u where u.name regexp
( select group_concat(concat('^',fi.family_name) SEPARATOR '|') from family_info fi )

結(jié)果是查詢(xún)出了姓名為“張”、“王”開(kāi)頭的記錄。
示例表的表語(yǔ)句:
CREATE TABLE `user` (
`name` varchar(32) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年齡'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶(hù)表'
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
('張'),
('王');總結(jié)
到此這篇關(guān)于mysql模糊匹配多個(gè)值的文章就介紹到這了,更多相關(guān)mysql模糊匹配多個(gè)值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解MySQL數(shù)據(jù)庫(kù)、表與完整性約束的定義(Create)
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)、表與完整性約束的定義(Create),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-04-04
MySQL百萬(wàn)級(jí)數(shù)據(jù)分頁(yè)查詢(xún)優(yōu)化方案
在mysql中l(wèi)imit可以實(shí)現(xiàn)快速分頁(yè),但是如果數(shù)據(jù)到了幾百萬(wàn)時(shí)我們的limit必須優(yōu)化才能有效的合理的實(shí)現(xiàn)分頁(yè)了,否則可能卡死你的服務(wù)器哦。2017-11-11
MySQL?根據(jù)表名稱(chēng)生成完整select語(yǔ)句詳情
這篇文章主要介紹了MySQL?根據(jù)表名稱(chēng)生成完整select語(yǔ)句,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
mysql數(shù)據(jù)庫(kù)亂碼之保存越南文亂碼解決方法
做一個(gè)包含越南文的網(wǎng)站,用戶(hù)說(shuō)在保存包含越南文的文章時(shí),MSYQL亂碼了,看下面的解決方法2013-12-12
通過(guò)DML更新MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)的示例代碼
這篇文章主要給大家介紹了如何通過(guò)DML更新MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù),通過(guò)DML來(lái)對(duì)數(shù)據(jù)庫(kù)種地表的數(shù)據(jù)記錄進(jìn)行增刪改查操作,文中給大家了詳細(xì)的代碼示例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下2024-01-01
MySQL創(chuàng)建內(nèi)部臨時(shí)表的所有場(chǎng)景盤(pán)點(diǎn)
這篇文章主要為大家介紹了MySQL創(chuàng)建內(nèi)部臨時(shí)表的所有場(chǎng)景盤(pán)點(diǎn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
mysql8新特性之binlog_expire_logs_seconds淺析
MySQL8中新增了不少新特性,這些特性提高了數(shù)據(jù)庫(kù)的安全性和性能,使數(shù)據(jù)庫(kù)管理員能夠更靈活地進(jìn)行賬戶(hù)管理工作,下面這篇文章主要給大家介紹了關(guān)于mysql8新特性之binlog_expire_logs_seconds的相關(guān)資料,需要的朋友可以參考下2023-02-02

