在MySQL中的LIKE查询中使用OR来比较多个字段

RCN*_*eil 18 mysql sql-like

我一直以为你可以OR在一个LIKE语句中用来查询MySQL中的东西.所以,如果我想将一行中的多个字段与1个关键字或术语进行比较:

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword%'; 
Run Code Online (Sandbox Code Playgroud)

如果我有一系列的词比较:

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword1%' 
AND Column1 OR Column2 LIKE '%keyword2%';
Run Code Online (Sandbox Code Playgroud)

但是,我不相信语法是正确的.是否有一种有效的方法可以将此写为:

SELECT * FROM MyTable WHERE Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%' AND Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%';
Run Code Online (Sandbox Code Playgroud)

我正确地谈到这个吗?

Sas*_*ant 31

用这个::

SELECT * FROM MyTable WHERE (Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%') AND (Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%');
Run Code Online (Sandbox Code Playgroud)


Maz*_*ick 22

最接近您希望的语法是:

SELECT * FROM MyTable
WHERE (CONCAT(Column1, Column2) LIKE '%keyword1%')
AND (CONCAT(Column1, Column2) LIKE '%keyword2%')
Run Code Online (Sandbox Code Playgroud)

注意:搜索字符串开头的"%"排除了索引的使用.如果要搜索任何大量记录,最好重新考虑实现.

  • 除非你能确信Column1和Column2永远不会为null,否则我建议使用CONCAT_WS.否则他们将返回false.它可能仍然匹配其中一列. (3认同)