示例:
select * from a where a.a like concat('%','123','%') or a.b like concat('%','123','%') or a.c like concat('%','123','%');
或者
select * from a where a.a like concat('%','123','%') or a.b like concat('%','234','%') or a.c like concat('%','456','%');
这种执行起来效率不高,怎么办?这里介绍一下instr(str1,str2)这个函数,是找str2在str1中出现几次,如果没出现则返回0,如果出现了则大于1
提供以下办法,真的第一种情况有两种办法,第一种先将a,b,c字段拼接起来,然后再like,这样会稍微快一点,如下(注意concat函数需要注意null值):
select * from a where concat(ifnull(a.a,''),ifnull(a.a,''),ifnull(a.a,'')) like concat('%','123','%');
第二种:
select * from a where instr(a.a,'123')>0 or instr(a.b,'123')>0 or instr(a.c'123')>0;
第三种就是将第一种和第二种集合起来
select * from a where instr(concat(ifnull(a.a,''),ifnull(a.b,''),ifnull(a.c,'')) ,'123');
当然遇到第二种情况就老老实实用instr函数吧,会比上面的快一点
select * from a where instr(a.a,'123')>0 or instr(a.b,'123')>0 or instr(a.c'456')>0;