'LIKE('%this''或'%that%')和something = else'不起作用

时间:2011-06-29 20:37:40

标签: mysql sql sql-like

我有一个选择查询,我正在尝试搜索多个模式的字符串

LIKE ('%this%' or '%that%' ) and something=else

返回零结果

然而

LIKE '%this%' and something=else

返回结果 和

LIKE '%that%' and something=else

返回结果

是否可以将所有结果都放入一个查询中?如果字符串匹配两者,它将如何处理?

7 个答案:

答案 0 :(得分:76)

如果可以的话会很好,但是你不能在SQL中使用那种语法。

试试这个:

(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something = else

注意使用括号!你需要围绕OR表达式。
如果没有括号,它将被解析为A OR (B AND C),这将无法提供您期望的结果。

答案 1 :(得分:21)

Instead of using `LIKE` use `REGEXP`.

For example:

    REGEXP 'THIS|THAT'

For example:

    REGEXP 'THIS|THAT'
mysql> SELECT 'pi' REGEXP 'pi|apa';                     -> 1
mysql> SELECT 'axe' REGEXP 'pi|apa';                    -> 0
mysql> SELECT 'apa' REGEXP 'pi|apa';                    -> 1
mysql> SELECT 'apa' REGEXP '^(pi|apa)$';                -> 1
mysql> SELECT 'pi' REGEXP '^(pi|apa)$';                 -> 1
mysql> SELECT 'pix' REGEXP '^(pi|apa)$';                -> 0

Refer:
http://dev.mysql.com/doc/refman/5.1/en/regexp.html

答案 2 :(得分:5)

尝试类似:

WHERE (column LIKE '%this%' OR column LIKE '%that%') AND something = else

答案 3 :(得分:3)

LIKE条款分成两个单独的语句,即:

(fieldname1 LIKE '%this%' or fieldname1 LIKE '%that%' ) and something=else

答案 4 :(得分:2)

你有什么东西不反对分裂吗?

...FROM <blah> 
   WHERE 
     (fieldA LIKE '%THIS%' OR fieldA LIKE '%THAT%') 
     AND something = else

答案 5 :(得分:1)

你试过了吗?

(column LIKE '%this%' and something=else) or (column LIKE '%that%' and something=else)

答案 6 :(得分:0)

我知道这有点老问题,但仍然有人试图找到有效的解决方案,所以你应该使用FULLTEXT index(它可以从MySQL 5.6.4获得)。

在表格中查询+ 35mil记录,其中三个like在其中 ~2.5s ,但在这些字段上添加索引并在match ... against ...内使用BOOLEAN MODE只花了 0.05s