20

我一直认为您可以ORLIKE语句中使用来查询 MySQL 中的内容。因此,如果我想将一行中的多个字段与 1 个关键字或术语进行比较:

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword%'; 

如果我有一组单词要比较:

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword1%' 
AND Column1 OR Column2 LIKE '%keyword2%';

但是,我不相信语法是正确的。除了以下内容之外,是否还有一种有效的方法来编写此内容:

SELECT * FROM MyTable WHERE Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%' AND Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%';

我这样做对吗?

4

2 回答 2

34

用这个::

SELECT * FROM MyTable WHERE (Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%') AND (Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%');
于 2012-06-19T18:18:52.303 回答
24

最接近您想要的语法是:

SELECT * FROM MyTable
WHERE (CONCAT(Column1, Column2) LIKE '%keyword1%')
AND (CONCAT(Column1, Column2) LIKE '%keyword2%')

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

如果您不能保证每列都不为 NULL,请改用 CONCAT_WS:

SELECT * FROM MyTable
WHERE (CONCAT_WS("-", Column1, Column2) LIKE '%keyword1%')
AND (CONCAT_WS("-", Column1, Column2) LIKE '%keyword2%')

此 CONCAT_WS 解决方案还具有可能的好处,即如果您选择的分隔符从未出现在关键字中,则可以确保仅在 Column1 或 Column2 中匹配您的“关键字”。

于 2012-06-19T18:29:11.913 回答