合并多个OR和LIKE条件的mySql查询

29 浏览
0 Comments

合并多个OR和LIKE条件的mySql查询

我知道在这里提到LIKE不能在IN子句中使用。

我的表有col1,col2,col3列。

如何使用LIKE运算符在多个列中查找多个值。

目前我的查询是:

SELECT col1, col2, col3
FROM table_name
WHERE
(   
    Col1 = '38' 
    OR Col1 LIKE '%,38'
    OR Col1 LIKE '%,38,%' 
    OR Col1 LIKE '38,%'
)
OR
(
    col2 = '38' 
    OR col2 LIKE '%,38'
    OR col2 LIKE '%,38,%' 
    OR col2 LIKE '38,%'
)
OR
(
    col3 = '38' 
    OR col3 LIKE '%,38'
    OR col3 LIKE '%,38,%' 
    OR col3 LIKE '38,%'
)

有没有办法使它更智能/更短/更快?

谢谢!

0
0 Comments

原因:问题的出现是因为需要在一个MySQL查询中同时使用多个OR和LIKE操作符来匹配多个字段。

解决方法:可以使用MySQL的FIND_IN_SET()函数来解决这个问题。FIND_IN_SET()函数用于查找一个值是否存在于一个包含逗号分隔的字符串中,并返回该值在字符串中的索引。可以通过将FIND_IN_SET()函数与多个OR操作符结合使用来实现同时匹配多个字段。

具体的解决方法如下所示:

SELECT col1, col2, col3
FROM table_name
WHERE FIND_IN_SET(38, col1) > 0 
  OR FIND_IN_SET(38, col2) > 0 
  OR FIND_IN_SET(38, col3) > 0 ;

以上代码中,我们通过使用FIND_IN_SET()函数和多个OR操作符来匹配多个字段。FIND_IN_SET(38, col1) > 0表示如果在col1字段中找到值为38的索引,则返回该记录。同样地,FIND_IN_SET(38, col2) > 0和FIND_IN_SET(38, col3) > 0分别表示在col2和col3字段中找到值为38的索引则返回记录。

通过将多个FIND_IN_SET()函数与多个OR操作符结合使用,我们可以实现在一个MySQL查询中同时匹配多个字段的需求。

0