使用LIKE或MATCH的SQL查询

时间:2015-12-12 17:17:14

标签: mysql sql

我有一个包含13列的表,其中有5列包含比如字符串数据或VARCHAR数据。

现在我有一个字符串让我们说“abc”。

我想编写一个sql查询来获取在这5列中包含此“abc”字符串的所有行。 “abc”可以是列数据部分列的数据。

我使用了LIKE函数

SELECT * FROM table WHERE col1 OR col2 OR col3 OR col4 OR col5 LIKE '%abc%';

但它并没有起作用,所有行都回来了。

我也不知道如何使用MATCH函数,我在sql中表现不错。所以任何人都可以提供帮助。

1 个答案:

答案 0 :(得分:6)

您可以多次指定条件:

SELECT * 
FROM table 
WHERE col1 LIKE '%abc%'
 OR col2 LIKE '%abc%'
 OR col3 LIKE '%abc%'
 OR col4 LIKE '%abc%' 
 OR col5 LIKE '%abc%';

这会非常慢,因为您有多个OR和非SARGable条件。

可替换地:

SELECT * 
FROM table 
WHERE CONCAT_WS('^', col1,col2,col3,col4,col5) LIKE '%abc%';

<小时/> 使用MATCH(使用全文索引的首选解决方案):

SELECT * 
FROM table 
WHERE MATCH(col1, col2,col3,col4, col5) AGAINST ('abc');

SqlFiddleDemo

请记住,要使用MATCH,您需要先创建索引:

ALTER TABLE tab ADD FULLTEXT ft_index_name (col1,col2,col3,col4,col5);